我有两个列表: 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循环将会更快更明确地表达你的意图。 –