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
隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
re 模組基本介紹 re 模組是 Python 用來處理正則表達式的標準模組。 正則表達式是一種用於描述字串模式的語法,可以用來匹配、搜尋、分割和替換字串中的特定模式。
Thumbnail
從範例學python的目標讀者: 針對剛進入的初學者,想學習Python語言。 有基礎本數學邏輯基礎即可。 從小遊戲學python的目標讀者: 針對已經有經驗的C/C++, Python, 或其他有程式基礎的讀者。 想實作一些小專案,從實做中學習如何分析需求、元件分拆、到底層實作
上兩篇有關List的文章,此篇文上兩章的延續,整理一些常用的方法和操作。 [Python]List(列表)新增、修改、刪除元素 [Python基礎]容器 list(列表),tuple(元組) 還有一些常用的 list 方法和操作,讓你能更靈活地處理列表數據
Thumbnail
今天要來介紹的是Python中資料型別的函數, 這幾天學習的素材是Youtube上“程式柴大大的Python 6 小時初學者課程”,一步一步帶著大家操作並解,學習中也別忘了要多多練習,練習的部分我是把我學到的東西請Chatgpt幫我出類似的題型並讓我練習。 以下我先寫出一個簡單的code,再加以
Thumbnail
Array可以說是各種語言除了基本型別之外,最常用的資料型別與容器之一了。 Array 這種連續格子狀的資料結構,在Python要怎麼表達呢? 建立一個空的陣列 最簡單也最直接的寫法就是 array = [] # Python list [] 就對應到大家熟知的array 陣列型態的資料結
Thumbnail
本文介紹瞭如何使用 Python pandas 進行資料分析,包括如何使用 corr() 函數針對數字類型的欄位進行分析,以及如何刪除不需要的欄位和取得想要的小數位數。
Thumbnail
f字符串(f-string)在Python 3.6版本引入了新特性,可以更方便地格式化字符串。本文介紹了f-string的基本使用方法,以及表達式、運算符、格式化控制、字典和列表的應用,以及調用方法和函數等。f-string提供了一種更靈活的方式,使你能夠控制字符串的外觀,以滿足不同情況下的需求。
Thumbnail
題目敘述 題目會給我們一個字串s。 要求我們移除字串中的星號,還有刪除星號左手邊最靠近的第一個字元。 以字串的形式返回輸出答案。 題目的原文敘述 測試範例 Example 1: Input: s = "leet**cod*e" Output: "lecoe" Explanation:
Thumbnail
在數據分析的工作中,處理 CSV 檔案是一項基礎且重要的技能,CSV 格式的檔案是以純文字形式儲存表格數據,簡潔的結構使其普遍應用於數據儲存。本文將介紹如何使用Python 來讀取、處理和儲存 CSV 檔案。
Thumbnail
本文介紹了串列運算式的應用,以及與Lambda匿名函式方法的比較,並提供了程式範例。串列運算式提供了一種簡潔的語法,用於創建、轉換和過濾列表。lambda函式用於創建匿名函式,通常用於簡單的操作。建議在比較複雜的情況下使用一般for迴圈加if來表示。
Thumbnail
隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
re 模組基本介紹 re 模組是 Python 用來處理正則表達式的標準模組。 正則表達式是一種用於描述字串模式的語法,可以用來匹配、搜尋、分割和替換字串中的特定模式。
Thumbnail
從範例學python的目標讀者: 針對剛進入的初學者,想學習Python語言。 有基礎本數學邏輯基礎即可。 從小遊戲學python的目標讀者: 針對已經有經驗的C/C++, Python, 或其他有程式基礎的讀者。 想實作一些小專案,從實做中學習如何分析需求、元件分拆、到底層實作
上兩篇有關List的文章,此篇文上兩章的延續,整理一些常用的方法和操作。 [Python]List(列表)新增、修改、刪除元素 [Python基礎]容器 list(列表),tuple(元組) 還有一些常用的 list 方法和操作,讓你能更靈活地處理列表數據
Thumbnail
今天要來介紹的是Python中資料型別的函數, 這幾天學習的素材是Youtube上“程式柴大大的Python 6 小時初學者課程”,一步一步帶著大家操作並解,學習中也別忘了要多多練習,練習的部分我是把我學到的東西請Chatgpt幫我出類似的題型並讓我練習。 以下我先寫出一個簡單的code,再加以
Thumbnail
Array可以說是各種語言除了基本型別之外,最常用的資料型別與容器之一了。 Array 這種連續格子狀的資料結構,在Python要怎麼表達呢? 建立一個空的陣列 最簡單也最直接的寫法就是 array = [] # Python list [] 就對應到大家熟知的array 陣列型態的資料結
Thumbnail
本文介紹瞭如何使用 Python pandas 進行資料分析,包括如何使用 corr() 函數針對數字類型的欄位進行分析,以及如何刪除不需要的欄位和取得想要的小數位數。
Thumbnail
f字符串(f-string)在Python 3.6版本引入了新特性,可以更方便地格式化字符串。本文介紹了f-string的基本使用方法,以及表達式、運算符、格式化控制、字典和列表的應用,以及調用方法和函數等。f-string提供了一種更靈活的方式,使你能夠控制字符串的外觀,以滿足不同情況下的需求。
Thumbnail
題目敘述 題目會給我們一個字串s。 要求我們移除字串中的星號,還有刪除星號左手邊最靠近的第一個字元。 以字串的形式返回輸出答案。 題目的原文敘述 測試範例 Example 1: Input: s = "leet**cod*e" Output: "lecoe" Explanation:
Thumbnail
在數據分析的工作中,處理 CSV 檔案是一項基礎且重要的技能,CSV 格式的檔案是以純文字形式儲存表格數據,簡潔的結構使其普遍應用於數據儲存。本文將介紹如何使用Python 來讀取、處理和儲存 CSV 檔案。
Thumbnail
本文介紹了串列運算式的應用,以及與Lambda匿名函式方法的比較,並提供了程式範例。串列運算式提供了一種簡潔的語法,用於創建、轉換和過濾列表。lambda函式用於創建匿名函式,通常用於簡單的操作。建議在比較複雜的情況下使用一般for迴圈加if來表示。