透過 zip,你可以把兩個或多個串列(或其他任何一串東西,下同),像是拉鍊一對一樣的組合起來,並逐對的用迴圈處理。一個基本的範例如下:

a = ['A', 'B', 'C', 'D']
b = ['W', 'X', 'Y', 'Z']

for m, n in zip(a, b):
	print(m ,n)

如果兩個或多個串列的長度不一時,zip 只會幫你處理到最短的那個結束為止:

a = ['A', 'B', 'C', 'D', 'E', 'F']
b = ['W', 'X', 'Y', 'Z']

for m, n in zip(a, b):
	print(m ,n)

如果你在進行處理的時候,除了原本值的資訊以外,也需要知道他們是第幾對的話,則當然可以跟 enumerate 一起使用。此時,在迴圈的變數位置處,需要把 zip 產生出的配對用括號括住:

a = ['A', 'B', 'C', 'D']
b = ['W', 'X', 'Y', 'Z']

for i, (m, n) in enumerate(zip(a, b)):
	print(i, m ,n)

透過 map,可以很方便的幫你把串列的每個元素,都進行一樣的處理。以下範例,將比較原版迴圈、list comprehension,以及 map 等寫法:

a = ['12', '34', '56', '78', '90']

b1 = []
for v in a:
	b1.append(int(v))
print(b1)

b2 = [int(v) for v in a]
print(b2)

b3 = list(map(int, a)) # 在 Python 2 當中,用 b = map(int, a) 就可以了,不需要再轉換成 list
print(b3)

如果你需要用 map 執行自訂的操作,則跟排序一樣,可以帶入自定的 function,或者使用 lambda function:

a = ['12', '34', '56', '78', '90']


def my_func(val):
	return int(val) % 3


b1 = list(map(my_func, a))
print(b1)

b2 = list(map(lambda x: int(x) % 3, a))
print(b2)

透過 filter,則可以篩選出串列當中,符合特定條件的元素:

a = ['12', '34', '56', '78', '90']


def my_func(val):
	return int(val) % 3 == 0


b1 = list(filter(my_func, a))
print(b1)

b2 = list(filter(lambda x: int(x) % 3 == 0, a))
print(b2)