PY 筆記 | Data Structure

閱讀時間約 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
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
11/20日NVDA即將公布最新一期的財報, 今天Sell Side的分析師, 開始調高目標價, 市場的股價也開始反應, 未來一週NVDA將重新回到美股市場的焦點, 今天我們要分析NVDA Sell Side怎麼看待這次NVDA的財報預測, 以及實際上Buy Side的倉位及操作, 從
Thumbnail
Hi 大家好,我是Ethan😊 相近大家都知道保濕是皮膚保養中最基本,也是最重要的一步。無論是在畫室裡長時間對著畫布,還是在旅途中面對各種氣候變化,保持皮膚的水分平衡對我來說至關重要。保濕化妝水不僅能迅速為皮膚補水,還能提升後續保養品的吸收效率。 曾經,我的保養程序簡單到只包括清潔和隨意上乳液
今天這篇文章要來教各位另一種製作音樂房間的方式 使用這個方式的話不需要為每一個歌曲單獨建立畫面或是代碼 算是一個比較方便的一種方式 看各位想要用什麼方式你可以把 track 改成任意其他名字,但注意如果更改的話之後的代碼也要改成你更改成的那個名字會讓 Renpy 自動選擇歌曲封面
今天這篇文章要來教各位另一種製作音樂房間的方式 使用這個方式的話不需要為每一個歌曲單獨建立畫面或是代碼 算是一個比較方便的一種方式 看各位想要用什麼方式
Thumbnail
安安~今天我要和各位展示如何自製一個音樂房間 今天的音樂房間大概會長這樣 因為一些建議製作了另一版的音樂房間教學你需要準備的東西: 1x 背景圖片 幾首你打算播放的歌 幾個作為切換歌曲的按鈕 看你準備了幾首歌,也準備同樣數量的封面圖加入音樂建立單獨歌曲畫面建立新畫面製作解鎖音樂功能
安安呐~今天這篇教學要來教各位如何在 Renpy 裡做出打字特效 其實這個非常簡單做法的說,但因為很多人詢問所以就還是決定寫一篇惹 為什麼說很簡單呢~?
今天要給各位帶來另一個關於 GUI 自訂的教學 這次的重點也放在我們重要的封面上面! 就像我們這篇文章的標題寫的 如果你希望讓封面在有存檔時 (非第一次打開遊戲) 更換的話就可以使用這個教學裡的方法拉! 這個教學我們會用到持久性變量 和 if語句
為甚麼我的音樂,音效,聲音沒有辦法正常撥放? 如果你把你的音檔放在 game/audio 裡面的話你可以把你的代碼改成 play sound(/music/voice) 如果這還是不能解決的話你也可以在檢查看看你的檔案是否是renpy可以支援的,如果不是的話可以使用網路上的各種網頁/軟體轉檔窩
這篇教學呢會介紹如何自訂 loading 畫面! 在開始之前先讓你知道這個功能基本上已經用不到囉 因為 loading 畫面只有在畫面在等 作法 1: 系統自動顯示等待畫面 作法 2: 手動強制顯示等待畫面 將圖片取名為 presplash.png
這篇會教你如何在 Renpy 裡面使用 if ! If 的使用方式 這節希望可以讓你理解甚麼是 If 和何時
Thumbnail
這個教學是關於探索地圖的教學 教學包含了 使用 imagemap 出現提示 建立可互動式地圖 解謎系統 設定 / 使用變量 根據成功或失敗出現對應的畫面 這篇會稍微比較長也比較複雜ㄧ點如果中間有甚麼不懂的歡迎私訊我!
Call 語句​ 它可以用來跳轉劇情 使用 call 可以從劇情A -> 跳到劇情B -> 之後再跳回去劇情A 範例: call next_s
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
11/20日NVDA即將公布最新一期的財報, 今天Sell Side的分析師, 開始調高目標價, 市場的股價也開始反應, 未來一週NVDA將重新回到美股市場的焦點, 今天我們要分析NVDA Sell Side怎麼看待這次NVDA的財報預測, 以及實際上Buy Side的倉位及操作, 從
Thumbnail
Hi 大家好,我是Ethan😊 相近大家都知道保濕是皮膚保養中最基本,也是最重要的一步。無論是在畫室裡長時間對著畫布,還是在旅途中面對各種氣候變化,保持皮膚的水分平衡對我來說至關重要。保濕化妝水不僅能迅速為皮膚補水,還能提升後續保養品的吸收效率。 曾經,我的保養程序簡單到只包括清潔和隨意上乳液
今天這篇文章要來教各位另一種製作音樂房間的方式 使用這個方式的話不需要為每一個歌曲單獨建立畫面或是代碼 算是一個比較方便的一種方式 看各位想要用什麼方式你可以把 track 改成任意其他名字,但注意如果更改的話之後的代碼也要改成你更改成的那個名字會讓 Renpy 自動選擇歌曲封面
今天這篇文章要來教各位另一種製作音樂房間的方式 使用這個方式的話不需要為每一個歌曲單獨建立畫面或是代碼 算是一個比較方便的一種方式 看各位想要用什麼方式
Thumbnail
安安~今天我要和各位展示如何自製一個音樂房間 今天的音樂房間大概會長這樣 因為一些建議製作了另一版的音樂房間教學你需要準備的東西: 1x 背景圖片 幾首你打算播放的歌 幾個作為切換歌曲的按鈕 看你準備了幾首歌,也準備同樣數量的封面圖加入音樂建立單獨歌曲畫面建立新畫面製作解鎖音樂功能
安安呐~今天這篇教學要來教各位如何在 Renpy 裡做出打字特效 其實這個非常簡單做法的說,但因為很多人詢問所以就還是決定寫一篇惹 為什麼說很簡單呢~?
今天要給各位帶來另一個關於 GUI 自訂的教學 這次的重點也放在我們重要的封面上面! 就像我們這篇文章的標題寫的 如果你希望讓封面在有存檔時 (非第一次打開遊戲) 更換的話就可以使用這個教學裡的方法拉! 這個教學我們會用到持久性變量 和 if語句
為甚麼我的音樂,音效,聲音沒有辦法正常撥放? 如果你把你的音檔放在 game/audio 裡面的話你可以把你的代碼改成 play sound(/music/voice) 如果這還是不能解決的話你也可以在檢查看看你的檔案是否是renpy可以支援的,如果不是的話可以使用網路上的各種網頁/軟體轉檔窩
這篇教學呢會介紹如何自訂 loading 畫面! 在開始之前先讓你知道這個功能基本上已經用不到囉 因為 loading 畫面只有在畫面在等 作法 1: 系統自動顯示等待畫面 作法 2: 手動強制顯示等待畫面 將圖片取名為 presplash.png
這篇會教你如何在 Renpy 裡面使用 if ! If 的使用方式 這節希望可以讓你理解甚麼是 If 和何時
Thumbnail
這個教學是關於探索地圖的教學 教學包含了 使用 imagemap 出現提示 建立可互動式地圖 解謎系統 設定 / 使用變量 根據成功或失敗出現對應的畫面 這篇會稍微比較長也比較複雜ㄧ點如果中間有甚麼不懂的歡迎私訊我!
Call 語句​ 它可以用來跳轉劇情 使用 call 可以從劇情A -> 跳到劇情B -> 之後再跳回去劇情A 範例: call next_s