2016-07-28 26 views
0

我有两个列表: a=[1,2,3]b=[a,b,c]如何为每个用于两个列表的zip的迭代调用函数?

我想对那些两次,每次zip调用一个函数,而不是做一个平凡的方式中一个for循环。有没有pythonic的方式?我试着用map

map(func(i,v) for i,v in zip(a,b))

,但它不工作

+2

*它不起作用*这是怎么回事?请显示您尝试过的结果 –

+2

以及为什么这些结果不符合您(您的预期输出/行为是什么) –

+1

要使用地图,您只需指定'map(func,a,b)'。或者你可以使用你在列表理解中所写的内容。但是,如果你不想收集你的函数的结果,for循环将会更快更明确地表达你的意图。 –

回答

0

如果功能func不返回任何东西,你可以使用:

any(func(i, v) for i,v in zip(a, b)) 

将返回False,但不会累积的结果。

由于any()被用于其副作用,因此这不会被认为是“Pythonic”,因此不是非常明确。

1

列表理解总是会更快或相当于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'] 
+1

该函数不返回任何内容,它处理文件 – curious

+0

@curious在这里没有看到任何文件。这个函数确实会返回一个值。 –

+0

我的功能我的意思是什么都没有返回。它对文件做了一些事情。那么为什么要使用列表理解呢? – curious

5

的Python的方式 for循环:

for i, v in zip(a, b): 
    func(i, v) 

清晰,简洁,可读。什么是不喜欢?

相关问题