PY 筆記 | Data Structure

更新於 2024/12/03閱讀時間約 7 分鐘

又轟轟地結束第二個月的課程。這一個月的課程聚焦在如何處理 Python 的資料。

字串 (String)

字串是非常非常常見的資料結構,常見到什麼程度?大概是我上班路上會遇到的紅燈機會那麼高吧 XD

介紹幾個好用的字串方法:

  1. find:這可以找出特定字元的位置 (index)。
  2. len:計算字串的長度。
  3. strip:去除字串前後的空白。他還有兄弟 lstriprstrip,顧名思義就是只去除左邊或右邊的空白。
  4. lowerupper:把字串變成全部小寫或全部大寫。
  5. replace("old", "new"):用新字元替換舊字元。
  6. startswithendswith:判斷字串是否使用特定的前綴或後綴。

以下為簡單的範例:

text = "X-DSPAM-Confidence:    0.8475"
pos = text.find(' ')
textLen = len(text)
print(pos, textLen)
print(text[pos : textLen].strip())



文件 (File)

我們可以用 Python 來讀取文件,以下範例為使用課程提供之純文字文件作範例,如果想自己練習的話,可以自己建一支 txt 檔案。

  1. open:開啟一個文件,可以加入第二個參數,比如 "r" 為唯讀、"w" 為編輯 (會從開啟處覆蓋掉舊內容)、"a" 為續寫。
  2. read:檔案開啟後,逐行讀取檔案。readline 也可以讀取整行資料,但他只讀取一行,read 是逐行讀完整個檔案。

以下為簡單範例,會逐行印出去除左右空白且轉為大寫的字串:

fname = input("Enter file name: ")
fh = open(fname)
for line in fh:
lh = line.strip().upper()
print(lh)



列表 (List)

用 JavaScript 的思維想就是陣列,基本操作跟字串大差不差,但列表中的元素可以直接修改,字串不行。

  1. lst["start" : "end"]:索引或裁切,這個同樣適用於字串。
  2. maxminsum:取列表的最大、最小或值得總和。
  3. appendinsert:前者為向列表後插入一個元素;後者接受兩個參數,第一個是插入位置,第二個是插入元素。
  4. popremove:前者不加參數時會直接從列表後方取出最後一個元素並從原列表中山出該元素,帶參數則是取出指定位置參數;後者會去搜尋整個列表符合參數的部分,但僅會刪除遇到第一個符合的部分。
  5. index:可以返回元素索引值,也可以用在字串。
  6. lst.sort()sorted(lst):前者是對原列表做排序,後者是返回一個排序後的列表。
  7. reverse:反轉列表。

以下為簡單範例,把檔案中的單字逐一送入變成列表:

fh = open('romeo.txt')
lst = list()
for line in fh:
subLst = line.strip().split()
for i in range(len(subLst)):
lst.append(subLst[i])
lst = list(set(lst))
lst.sort()
print(lst)



字典 (dictionary)

用 JavaScript 的方式講,就是物件,同樣可以用 { } 宣告或是用 dict()

字典有趣的地方是每個元素都由鍵 (key) 與值 (value) 組成,這可以讓我們更靈活地去操縱比較複雜的資料。我們可以用 dic["key"] 的方式去取出存在某個 key 下面的值來使用,也可以用這個方法來輕鬆新增或修改。接著下面為常用的字典方法。

  1. keys:返回所有鍵。
  2. values:返回所有值。
  3. items:一個一個返回鍵值對。
  4. clear:清空字典。
  5. get:獲取指定 key 的值,如果沒有這個 key 就給他默認值 (詳見範例)。

以下為一個簡單的範例,用來找出發信最多的信箱以及其次數:

fh = open('mbox-short.txt')
dic = dict()
maxNum = 0
maxEmail = ''
for line in fh:
if not line.startswith('From'):
continue
elif line.startswith('From:'):
continue
else:
words = line.strip().split()
dic[words[1]] = dic.get(words[1], 0) + 1
for i in dic:
if dic[i] > maxNum:
maxNum = dic[i]
maxEmail = i
print(maxEmail, maxNum)



元組 (tuples)

我在 TypeScript 的文章中說過,元組是一個長得很像陣列 (在 Python 叫列表) 但又比陣列嚴苛的東西。

寫過 TypeScript 的都知道原組和陣列都是用 [ ]包起來,但 Python 中的元組則是用 ( ) 包起來。

元組最大的特性就是不可修改,這種只能讀而無法修改的特性可以讓我們放心儲存那些怕更動到的資料。而其實我們在前面字典中已經有稍微接觸過元組了,要不要猜猜看?

答案就是 items 方法!

上面有講到 items 會回傳一組組的 key-value pair,這個一組組就是元組的格式。

以下為一個簡單的範例,這裡在最後用 items 把字典拆成元組並透過 sorted 進行排序:

fh = open('mbox-short.txt')
dic = dict()
for line in fh:
if not line.startswith('From'):
continue
elif line.startswith('From:'):
continue
else:
colonIndex = line.index(':')
hr = line[colonIndex - 2 : colonIndex]
dic[hr] = dic.get(hr, 0) + 1
ls = sorted(dic.items())
for k, v in ls:
print(k, v)



參考資料

  1. Python for Everybody / Coursera
avatar-img
18會員
37內容數
這個專題用來存放我在學習網頁開發時的心得及知識。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
Jeremy Ho的沙龍 的其他內容
從 JavaScript 到 Python
從 JavaScript 到 Python
你可能也想看
Google News 追蹤
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
在 Python 中,生成器與裝飾器是兩個非常強大的特性,分別讓我們能更高效地處理數據流和更靈活地擴展函數的功能。
Thumbnail
解決 setuptools 的問題: SetuptoolsDeprecationWarning: setup.py install is deprecated. Use build and pip and other standards-based tools. 解決方法 目前
以下整理了今年發布的教學文章,部分文章尚未同步的方格子上還需等待 Orz 如果有希望我在未來製作的內容/教學的話,歡迎告訴我! 使用組合 (/ 清單) 使用隨機數值 為圖片加上濾鏡 骰子功能 使用動畫封面 庫存 / 背包系統 製作 / 自訂開頭動畫 自訂 loading 畫面
今天這篇文章要來教各位另一種製作音樂房間的方式 使用這個方式的話不需要為每一個歌曲單獨建立畫面或是代碼 算是一個比較方便的一種方式 看各位想要用什麼方式你可以把 track 改成任意其他名字,但注意如果更改的話之後的代碼也要改成你更改成的那個名字會讓 Renpy 自動選擇歌曲封面
今天這篇文章要來教各位另一種製作音樂房間的方式 使用這個方式的話不需要為每一個歌曲單獨建立畫面或是代碼 算是一個比較方便的一種方式 看各位想要用什麼方式
Thumbnail
安安~今天我要和各位展示如何自製一個音樂房間 今天的音樂房間大概會長這樣 因為一些建議製作了另一版的音樂房間教學你需要準備的東西: 1x 背景圖片 幾首你打算播放的歌 幾個作為切換歌曲的按鈕 看你準備了幾首歌,也準備同樣數量的封面圖加入音樂建立單獨歌曲畫面建立新畫面製作解鎖音樂功能
安安呐~今天這篇教學要來教各位如何在 Renpy 裡做出打字特效 其實這個非常簡單做法的說,但因為很多人詢問所以就還是決定寫一篇惹 為什麼說很簡單呢~?
今天要給各位帶來另一個關於 GUI 自訂的教學 這次的重點也放在我們重要的封面上面! 就像我們這篇文章的標題寫的 如果你希望讓封面在有存檔時 (非第一次打開遊戲) 更換的話就可以使用這個教學裡的方法拉! 這個教學我們會用到持久性變量 和 if語句
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
在 Python 中,生成器與裝飾器是兩個非常強大的特性,分別讓我們能更高效地處理數據流和更靈活地擴展函數的功能。
Thumbnail
解決 setuptools 的問題: SetuptoolsDeprecationWarning: setup.py install is deprecated. Use build and pip and other standards-based tools. 解決方法 目前
以下整理了今年發布的教學文章,部分文章尚未同步的方格子上還需等待 Orz 如果有希望我在未來製作的內容/教學的話,歡迎告訴我! 使用組合 (/ 清單) 使用隨機數值 為圖片加上濾鏡 骰子功能 使用動畫封面 庫存 / 背包系統 製作 / 自訂開頭動畫 自訂 loading 畫面
今天這篇文章要來教各位另一種製作音樂房間的方式 使用這個方式的話不需要為每一個歌曲單獨建立畫面或是代碼 算是一個比較方便的一種方式 看各位想要用什麼方式你可以把 track 改成任意其他名字,但注意如果更改的話之後的代碼也要改成你更改成的那個名字會讓 Renpy 自動選擇歌曲封面
今天這篇文章要來教各位另一種製作音樂房間的方式 使用這個方式的話不需要為每一個歌曲單獨建立畫面或是代碼 算是一個比較方便的一種方式 看各位想要用什麼方式
Thumbnail
安安~今天我要和各位展示如何自製一個音樂房間 今天的音樂房間大概會長這樣 因為一些建議製作了另一版的音樂房間教學你需要準備的東西: 1x 背景圖片 幾首你打算播放的歌 幾個作為切換歌曲的按鈕 看你準備了幾首歌,也準備同樣數量的封面圖加入音樂建立單獨歌曲畫面建立新畫面製作解鎖音樂功能
安安呐~今天這篇教學要來教各位如何在 Renpy 裡做出打字特效 其實這個非常簡單做法的說,但因為很多人詢問所以就還是決定寫一篇惹 為什麼說很簡單呢~?
今天要給各位帶來另一個關於 GUI 自訂的教學 這次的重點也放在我們重要的封面上面! 就像我們這篇文章的標題寫的 如果你希望讓封面在有存檔時 (非第一次打開遊戲) 更換的話就可以使用這個教學裡的方法拉! 這個教學我們會用到持久性變量 和 if語句