我有兩個列表: a=[1,2,3]
,b=[a,b,c]
如何爲每個用於兩個列表的zip的迭代調用函數?
我想對那些兩次,每次zip
調用一個函數,而不是做一個平凡的方式中一個for循環。有沒有pythonic的方式?我試着用map
:
map(func(i,v) for i,v in zip(a,b))
,但它不工作
我有兩個列表: a=[1,2,3]
,b=[a,b,c]
如何爲每個用於兩個列表的zip的迭代調用函數?
我想對那些兩次,每次zip
調用一個函數,而不是做一個平凡的方式中一個for循環。有沒有pythonic的方式?我試着用map
:
map(func(i,v) for i,v in zip(a,b))
,但它不工作
如果功能func
不返回任何東西,你可以使用:
any(func(i, v) for i,v in zip(a, b))
將返回False
,但不會累積的結果。
由於any()
被用於其副作用,因此這不會被認爲是「Pythonic」,因此不是非常明確。
列表理解總是會更快或相當於map
。如果您在修真的結果追加到列表中(如上例),那麼理解也比一個for loop
更快:
a = [1, 2, 3]
b = ['a', 'b', 'c']
c = []
def foo(x, y):
global c
result = x * y
c.append(result)
return result
>>> c
[]
>>> [foo(x, y) for x, y in zip(a, b)]
['a', 'bb', 'ccc']
>>> c
['a', 'bb', 'ccc']
的Python的方式是 for循環:
for i, v in zip(a, b):
func(i, v)
清晰,簡潔,可讀。什麼是不喜歡?
*它不起作用*這是怎麼回事?請顯示您嘗試過的結果 –
以及爲什麼這些結果不符合您(您的預期輸出/行爲是什麼) –
要使用地圖,您只需指定'map(func,a,b)'。或者你可以使用你在列表理解中所寫的內容。但是,如果你不想收集你的函數的結果,for循環將會更快更明確地表達你的意圖。 –