[Python基礎]for迴圈運用zip,enumerate函式

閱讀時間約 9 分鐘

在使用for迴圈時,都想著如何把列表的索引也跟著取出來標記檔案編號,是不是也有一種函式可以辦得到呢?~ 有那就是enumerate

有時候也想一次做兩件事情,同時左手拿肉吃,右手拿酒喝,在Python中也有類似的作法就是for迴圈應用zip的方法,就能一次處理兩個列表。

本文將介紹zipenumerate函式的應用,用程式範例來解析使用的好處。

語法說明

enumerate 函數:

enumerate(iterable, start=0)
  • iterable: 要迭代的可迭代對象,如列表、元組、字典等。
  • start(可選): 起始索引值,預設為 0。

enumerate 函數同樣用於遍歷可迭代對象,但它同時提供了元素的索引。

它返回一個產生元組的迭代器,其中每個元組的第一個元素是索引,第二個元素是原始可迭代對象的值。


程式範例

用於List的索引與元素:

names = ['Alice', 'Bob', 'Charlie']

# 使用 enumerate 遍歷列表並獲取索引和元素
for index, name in enumerate(names):
print(f"Index: {index}, Name: {name}")
# 輸出:
# Index: 0, Name: Alice
# Index: 1, Name: Bob
# Index: 2, Name: Charlie
raw-image

用於dit字典:

grades = {'Alice': 90, 'Bob': 75, 'Charlie': 88}

# 使用 enumerate 遍歷字典並獲取鍵和值
for index, (name, score) in enumerate(grades.items()):
print(f"Index: {index}, Name: {name}, Score: {score}")
# 輸出:
# Index: 0, Name: Alice, Score: 90
# Index: 1, Name: Bob, Score: 75
# Index: 2, Name: Charlie, Score: 88

enumerate 是在迭代中獲取索引和元素值時的一個實用工具,尤其是當你需要追蹤元素的位置時。


zip 函數:

zip 函數接受一個或多個可迭代對象(如列表、元組等),將對應的元素打包成元組的序列。這可以用於同時遍歷多個可迭代對象。

語法:

zip(iterable1, iterable2, ...)

iterable1, iterable2, ...:要打包的可迭代對象,可以是多個。

在這個例子中,zipnamesages 兩個可迭代對象的對應元素打包成元組的序列。

names = ['Alice', 'Bob', 'Charlie']
ages = [25, 30, 35]

# 使用 zip 將兩個可迭代對象打包
zipped_data = zip(names, ages)

# 將結果轉換為列表
result_list = list(zipped_data)

print(result_list)
# 輸出: [('Alice', 25), ('Bob', 30), ('Charlie', 35)]

範例(創建字典):

keys = ['name', 'age', 'city']
values = ['Alice', 25, 'New York']

# 使用 zip 創建字典
person_dict = dict(zip(keys, values))

print(person_dict)
# 輸出: {'name': 'Alice', 'age': 25, 'city': 'New York'}

使用 for 迴圈搭配 zip 有以下好處:

  1. 同時迭代多個可迭代對象: zip 允許你同時迭代多個可迭代對象,這樣你可以在同一個迴圈中訪問相應位置的元素,使得程式碼更簡潔。
  2. 可讀性: 使用 zip 可以提高程式碼的可讀性,因為它明確地表示你正在處理多個對應的元素,而不需要使用索引值。
  3. 避免使用索引: 不使用索引值可以減少錯誤的可能性,因為你不需要擔心迭代的範圍或確保兩個可迭代對象具有相同的長度。
  4. 應對不同長度的可迭代對象: 如果 zip 的可迭代對象長度不同,它將以最短的長度為基準。這使得在處理不同數據結構時更靈活。

程式範例

同時迭代多個列表:

names = ['Alice', 'Bob', 'Charlie']
ages = [25, 30, 35]
scores = [90, 85, 88]

# 使用 zip 遍歷三個可迭代對象
for name, age, score in zip(names, ages, scores):
print(f"Name: {name}, Age: {age}, Score: {score}")
# 輸出:
# Name: Alice, Age: 25, Score: 90
# Name: Bob, Age: 30, Score: 85
# Name: Charlie, Age: 35, Score: 88

同時迭代多個字典:

person1 = {'name': 'Alice', 'age': 25, 'city': 'New York'}
person2 = {'name': 'Bob', 'age': 30, 'city': 'San Francisco'}

# 使用 zip 同時迭代多個字典的鍵和值
for (key1, value1), (key2, value2) in zip(person1.items(), person2.items()):
print(f"Person 1 - {key1}: {value1}, Person 2 - {key2}: {value2}")
# 輸出:
# Person 1 - name: Alice, Person 2 - name: Bob
# Person 1 - age: 25, Person 2 - age: 30
# Person 1 - city: New York, Person 2 - city: San Francisco

zip 還可以應用在不同情境中,包括交換矩陣的行與列字典的鍵值對調等

交換矩陣的行與列:

zip(*matrix) 將矩陣的行與列交換,然後使用列表解析將其轉換為新的矩陣。

matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]

# 使用 zip(*matrix) 交換矩陣的行與列
transposed_matrix = [list(row) for row in zip(*matrix)]

for row in transposed_matrix:
print(row)
# 輸出:
# [1, 4, 7]
# [2, 5, 8]
# [3, 6, 9]

這裡的 zip(*matrix) 實際上就是zip(matrix[0], matrix[1], matrix[2]),將矩陣中的每一行當作參數傳給zip函式。

zip 函數將每一行的對應位置的元素打包成一個元組。接著,使用列表生成式 [list(row) for row in ...] 將這些元組轉換為列表,最終得到轉置後的矩陣 transposed_matrix

字典的鍵值對調:

在這個例子中,zip(original_dict.values(), original_dict.keys()) 將字典的鍵和值打包成元組,然後使用 dict() 創建新的字典。

original_dict = {'a': 1, 'b': 2, 'c': 3}

# 使用 zip 將字典的鍵和值對調
swapped_dict = dict(zip(original_dict.values(), original_dict.keys()))

print(swapped_dict)
# 輸出: {1: 'a', 2: 'b', 3: 'c'}


謝謝大家觀看~ 希望大家會喜歡,喜歡的話可以給愛心~追蹤一下,不會漏掉之後的文章喔~

avatar-img
121會員
203內容數
本業是影像辨識軟體開發,閒暇時間進修AI相關內容,將學習到的內容寫成文章分享。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
螃蟹_crab的沙龍 的其他內容
本文介紹了串列運算式的應用,以及與Lambda匿名函式方法的比較,並提供了程式範例。串列運算式提供了一種簡潔的語法,用於創建、轉換和過濾列表。lambda函式用於創建匿名函式,通常用於簡單的操作。建議在比較複雜的情況下使用一般for迴圈加if來表示。
如果我只是想要重複做一些很簡單的運算,還有沒有更簡潔的方式,那就是Lambda匿名函式。 本文將介紹 : Lambda匿名函式的用法,也比較跟自定函式的差異之處。 結合map,filter,sorted函式做應用介紹
有別於上一篇for迴圈[Python基礎]流程控制for迴圈,while迴圈則常常被說是無限迴圈,若未到達跳脫的條件,是不會停止的。 在日常生活中,我們也常常用到這個概念,例如泡奶粉,要一直攪拌到粉都溶解了為止,其中的一直跟為止就等於while迴圈概念一樣,一直做到某個條件滿足了被觸發才停止。
在日常中,常有重複性相當高的事情,不斷地重複在做,重複的事做久就會慢慢變成是一個習慣,這個習慣就會讓人下意識地完成一些事情。 習慣是一種自動化的行為模式,這些行為模式在重複進行的過程中變得固定且容易自動化。 在Python程式語言中,for迴圈就類似這種概念
在人生中總是會遇到許多選擇,做了不同的選擇產生的結果也會不一樣,大多時候都是在為了要吃什麼在抉擇,小孩才做選擇大人全部都要,全部都要何嘗也不是一個選擇。 在Python程式語言中也有選擇的語法,就是If Else,如果是就做什麼,不是就做什麼,有別於其他程式語言,他不一定要有else,可以只有If
邏輯運算子 它們在許多情境下都是程式語言中重要的工具,用於進行條件判斷和控制流程 在日常中總會遇到有些需要思考判斷的問題,比如要買東西,就會考慮到CP值,東西要好且要便宜,就是and的概念,如果在一些比較複雜的狀況,例如想晚餐吃什麼,就會想火鍋或燒烤都行,這就是or的概念。
本文介紹了串列運算式的應用,以及與Lambda匿名函式方法的比較,並提供了程式範例。串列運算式提供了一種簡潔的語法,用於創建、轉換和過濾列表。lambda函式用於創建匿名函式,通常用於簡單的操作。建議在比較複雜的情況下使用一般for迴圈加if來表示。
如果我只是想要重複做一些很簡單的運算,還有沒有更簡潔的方式,那就是Lambda匿名函式。 本文將介紹 : Lambda匿名函式的用法,也比較跟自定函式的差異之處。 結合map,filter,sorted函式做應用介紹
有別於上一篇for迴圈[Python基礎]流程控制for迴圈,while迴圈則常常被說是無限迴圈,若未到達跳脫的條件,是不會停止的。 在日常生活中,我們也常常用到這個概念,例如泡奶粉,要一直攪拌到粉都溶解了為止,其中的一直跟為止就等於while迴圈概念一樣,一直做到某個條件滿足了被觸發才停止。
在日常中,常有重複性相當高的事情,不斷地重複在做,重複的事做久就會慢慢變成是一個習慣,這個習慣就會讓人下意識地完成一些事情。 習慣是一種自動化的行為模式,這些行為模式在重複進行的過程中變得固定且容易自動化。 在Python程式語言中,for迴圈就類似這種概念
在人生中總是會遇到許多選擇,做了不同的選擇產生的結果也會不一樣,大多時候都是在為了要吃什麼在抉擇,小孩才做選擇大人全部都要,全部都要何嘗也不是一個選擇。 在Python程式語言中也有選擇的語法,就是If Else,如果是就做什麼,不是就做什麼,有別於其他程式語言,他不一定要有else,可以只有If
邏輯運算子 它們在許多情境下都是程式語言中重要的工具,用於進行條件判斷和控制流程 在日常中總會遇到有些需要思考判斷的問題,比如要買東西,就會考慮到CP值,東西要好且要便宜,就是and的概念,如果在一些比較複雜的狀況,例如想晚餐吃什麼,就會想火鍋或燒烤都行,這就是or的概念。
你可能也想看
Google News 追蹤
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
11/20日NVDA即將公布最新一期的財報, 今天Sell Side的分析師, 開始調高目標價, 市場的股價也開始反應, 未來一週NVDA將重新回到美股市場的焦點, 今天我們要分析NVDA Sell Side怎麼看待這次NVDA的財報預測, 以及實際上Buy Side的倉位及操作, 從
Thumbnail
Hi 大家好,我是Ethan😊 相近大家都知道保濕是皮膚保養中最基本,也是最重要的一步。無論是在畫室裡長時間對著畫布,還是在旅途中面對各種氣候變化,保持皮膚的水分平衡對我來說至關重要。保濕化妝水不僅能迅速為皮膚補水,還能提升後續保養品的吸收效率。 曾經,我的保養程序簡單到只包括清潔和隨意上乳液
Thumbnail
Python 提供了一個功能豐富的標準函式庫,其中 random 專門用於生成隨機數。本文將介紹 random 的基本介紹,以及函式應用。
Thumbnail
Dictionary(字典) : 是一個可以用來存放不同資料(不同型態)的容器(集合) 每一個元素都是以{鍵(Key):值(Value)}所構成,字典中每個項目都是用","隔開
Thumbnail
在如今的資訊時代,如何有效的獲取並處理數據,成為了許多專業人士和企業的重要需求,爬蟲技術,作為獲取網絡數據的重要工具,其重要性不言而喻,而這篇文章將分享Python爬蟲的基礎,讓你能獲取想要的網頁數據。
Thumbnail
Python 基本語法 python 語法的後綴名是以.py 結尾 python 執行方式 使用交互介面執行 使用 python test.py 命令執行 使用./test.py 執行 python 標示符 以單下劃線開頭的屬性,表示是類的私有屬性(包括方法,變量)。如:_foo表示不能直接訪問的類
詳細原碼: https://reurl.cc/ex8lZm hello world Variable (變數) 輸入 input() 四則運算 列表 list (陣列) 集合 字典(Dictionary) 給值 try 檢驗 取所有值 判斷式 If else 迴圈 Switch //字典方式 CSV
Thumbnail
「VSCode 是世上最棒的 IDE 了吧」這時有人跳出來表示不服,定睛一看原來是那陳年的大哥 Visual Studio,他說道:「用 Windows 做開發的人一定要裝 Visual Studio 這樣專業的 IDE,不要裝其他次等的文字編輯器,才可以有效提升專業度。」
Thumbnail
在上一篇文章中,我們已經準備好製作LINE機器人的工具了,接下來我們就要來做一個最簡單的Python與LINE的串接練習,讓我們的機器人活起來,並且做出最基本的回話功能,如果還沒準備好串接所需的工具,記得先去看《【python】Python+LINE Bot 輕鬆打造股市機器人(二) : 所需準備的
Thumbnail
在我們正式開始Python串接LINE Bot的教程之前,有必要先為大家準備好所需的工具。實際上,製作LINE Bot的工具有很多選擇,我將會介紹我在製作過程中所使用的具體工具有哪些,以及如何進行事前的準備工作。讓我們一起走進這個有趣的製作過程吧!
Thumbnail
每當要研究投資標的時,你是否也會覺得A網站的財報資料完整,又覺得B網站的選股條件完善,又覺得C網站的新聞比較重要,有時身邊又沒有隨身攜帶筆電怎麼好查詢呢?這時可能就在想怎麼沒有人開發一個程式能完成符合我想要的功能啊~~與其求助於人,不如自己動手做最好,有相同煩惱的人,LINE Bot超適合你!!
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
11/20日NVDA即將公布最新一期的財報, 今天Sell Side的分析師, 開始調高目標價, 市場的股價也開始反應, 未來一週NVDA將重新回到美股市場的焦點, 今天我們要分析NVDA Sell Side怎麼看待這次NVDA的財報預測, 以及實際上Buy Side的倉位及操作, 從
Thumbnail
Hi 大家好,我是Ethan😊 相近大家都知道保濕是皮膚保養中最基本,也是最重要的一步。無論是在畫室裡長時間對著畫布,還是在旅途中面對各種氣候變化,保持皮膚的水分平衡對我來說至關重要。保濕化妝水不僅能迅速為皮膚補水,還能提升後續保養品的吸收效率。 曾經,我的保養程序簡單到只包括清潔和隨意上乳液
Thumbnail
Python 提供了一個功能豐富的標準函式庫,其中 random 專門用於生成隨機數。本文將介紹 random 的基本介紹,以及函式應用。
Thumbnail
Dictionary(字典) : 是一個可以用來存放不同資料(不同型態)的容器(集合) 每一個元素都是以{鍵(Key):值(Value)}所構成,字典中每個項目都是用","隔開
Thumbnail
在如今的資訊時代,如何有效的獲取並處理數據,成為了許多專業人士和企業的重要需求,爬蟲技術,作為獲取網絡數據的重要工具,其重要性不言而喻,而這篇文章將分享Python爬蟲的基礎,讓你能獲取想要的網頁數據。
Thumbnail
Python 基本語法 python 語法的後綴名是以.py 結尾 python 執行方式 使用交互介面執行 使用 python test.py 命令執行 使用./test.py 執行 python 標示符 以單下劃線開頭的屬性,表示是類的私有屬性(包括方法,變量)。如:_foo表示不能直接訪問的類
詳細原碼: https://reurl.cc/ex8lZm hello world Variable (變數) 輸入 input() 四則運算 列表 list (陣列) 集合 字典(Dictionary) 給值 try 檢驗 取所有值 判斷式 If else 迴圈 Switch //字典方式 CSV
Thumbnail
「VSCode 是世上最棒的 IDE 了吧」這時有人跳出來表示不服,定睛一看原來是那陳年的大哥 Visual Studio,他說道:「用 Windows 做開發的人一定要裝 Visual Studio 這樣專業的 IDE,不要裝其他次等的文字編輯器,才可以有效提升專業度。」
Thumbnail
在上一篇文章中,我們已經準備好製作LINE機器人的工具了,接下來我們就要來做一個最簡單的Python與LINE的串接練習,讓我們的機器人活起來,並且做出最基本的回話功能,如果還沒準備好串接所需的工具,記得先去看《【python】Python+LINE Bot 輕鬆打造股市機器人(二) : 所需準備的
Thumbnail
在我們正式開始Python串接LINE Bot的教程之前,有必要先為大家準備好所需的工具。實際上,製作LINE Bot的工具有很多選擇,我將會介紹我在製作過程中所使用的具體工具有哪些,以及如何進行事前的準備工作。讓我們一起走進這個有趣的製作過程吧!
Thumbnail
每當要研究投資標的時,你是否也會覺得A網站的財報資料完整,又覺得B網站的選股條件完善,又覺得C網站的新聞比較重要,有時身邊又沒有隨身攜帶筆電怎麼好查詢呢?這時可能就在想怎麼沒有人開發一個程式能完成符合我想要的功能啊~~與其求助於人,不如自己動手做最好,有相同煩惱的人,LINE Bot超適合你!!