Python: 使用for-in, zip函數, map函數做迴圈處理

Table of Contents

Table of Contents

在Python中做迴圈處理時,你都是用什麼方法呢?是用for-in?還是zip函數?還是map函數呢?
這裡整理了對list、dict做迴圈處理的方法。

list、dict的內容

首先,這次要做迴圈處理的實驗對象如下。

listA = [1, 2, 3, 4, 5]
dictA = {'a1': 1, 'a2':2, 'a3':3, 'a4': 4, 'a5': 5}

「for...in...」做迴圈處理

list對象


for item in listA:
  print(item)

# output:
# 1
# 2
# 3
# 4
# 5

list的時候,可以對每一筆資料進行讀取。

dict對象


for item in dictA:
  print(item)

# output:
# a1
# a2
# a3
# a4
# a5

dict的時候、則讀取每一筆資料的key
若是像要讀取1、2、3、4、5這些值的話,可以使用values()函數。

for item in dictA.values():
  print(item)

# output:
# 1
# 2
# 3
# 4
# 5

index的使用

不僅是要讀取值,有時候也需要知道現在的值是第幾筆資料,也就是index。
以下介紹常見的方法來在迴圈中得到index。

list: enumerate()

使用enumerate()函數。


for index, value in enumerate(listA):
  print(f"{index}: {value}")

# output
# 0: 1
# 1: 2
# 2: 3
# 3: 4
# 4: 5

list: range()

使用range()函數。


for index in range(len(listA)):
  value = listA[index]
  print(f"{index}: {value}")

# output
# 0: 1
# 1: 2
# 2: 3
# 3: 4
# 4: 5

range函數的優點在於,函數中可以設定start、stop、step這些參數,讓使用者能調整列表的迴圈範圍條件,提升迴圈處理的自由性。
比方說,只對index=0,2,4處理的時候、可以用range(start, stop, step)來達成目的。用list(range(0, len(listA), 2))能產生[0, 2, 4],如此即可像下面的範例來做迴圈處理。


for index in range(0, len(listA), 2):
  value = listA[index]
  print(f"{index}: {value}")

# output
# 0: 1
# 2: 3
# 4: 5

dict對象

dict的時候、會有想要取得鍵值對key-value pair的情況。
這時會使用items()函數。


for key, value in dictA.items():
  print(f"{key}: {value}")

# output
# a1: 1
# a2: 2
# a3: 3
# a4: 4
# a5: 5

兩個list同時做迴圈處理

遇到這種狀況時,可以使用zip函數可以輕鬆達成這個目的。

listA = [1, 2, 3, 4, 5]
listB = ['A', 'B', 'C', 'D', 'E']
for itemA, itemB in zip(listA, listB):
    print(f"listA:{itemA}, listB:{itemB}")

# output
# listA:1, listB:A
# listA:2, listB:B
# listA:3, listB:C
# listA:4, listB:D
# listA:5, listB:E

zip函數也可以用在兩個以上的list同時執行迴圈處理的情形。
zip函數使用在兩個長度不一樣的list時,也可以執行,但是迴圈次數以最短長度的list為主。

map函數

當要做出一個list,其要素的值是另一個list中的要素值的兩倍時,可以使用map函數來達成。


listAx2 = list(map(lambda x: x * 2, listA))

列表推導式

上述map函數的範例也可用列表推導式來達成。

listAx2 = [ x*2 for x in listA]

總結

  • 使用for inzip函數、map函數可以執行迴圈處理。
  • 使用enumerate函數可以讓listdist做迴圈處理時,取得indexkey-value