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
18會員
37內容數
這個專題用來存放我在學習網頁開發時的心得及知識。
留言0
查看全部
發表第一個留言支持創作者!
Jeremy Ho的沙龍 的其他內容
從 JavaScript 到 Python
從 JavaScript 到 Python
你可能也想看
Google News 追蹤
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
Thumbnail
Faker昨天真的太扯了,中國主播王多多點評的話更是精妙,分享給各位 王多多的點評 「Faker是我們的處境,他是LPL永遠繞不開的一個人和話題,所以我們特別渴望在決賽跟他相遇,去直面我們的處境。 我們曾經稱他為最高的山,最長的河,以為山海就是盡頭,可是Faker用他28歲的年齡...
今天這篇文章要來教各位另一種製作音樂房間的方式 使用這個方式的話不需要為每一個歌曲單獨建立畫面或是代碼 算是一個比較方便的一種方式 看各位想要用什麼方式你可以把 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
美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
Thumbnail
Faker昨天真的太扯了,中國主播王多多點評的話更是精妙,分享給各位 王多多的點評 「Faker是我們的處境,他是LPL永遠繞不開的一個人和話題,所以我們特別渴望在決賽跟他相遇,去直面我們的處境。 我們曾經稱他為最高的山,最長的河,以為山海就是盡頭,可是Faker用他28歲的年齡...
今天這篇文章要來教各位另一種製作音樂房間的方式 使用這個方式的話不需要為每一個歌曲單獨建立畫面或是代碼 算是一個比較方便的一種方式 看各位想要用什麼方式你可以把 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