2013-05-12 63 views
0

我有一个返回元组的函数foo()。比方说('a', 1) 我有一个迭代器a,我想迭代并将每个项传递给该函数。 最后,我需要两个列表 - r1r2其中r1由函数返回的元组中的所有第一项组成。第二个列表r2 - 这些元组中所有第二项的结果。在一次迭代中从元组列表中分配两个变量

r1 = ['a', 'b', 'c'] 
r2 = [1, 2, 3] 

我不喜欢这种方法太多:

result = [foo(i) for i in a] 
r1 = [i[0] for i in result] 
r2 = [i[1] for i in result] 

回答

4

可以使用zip功能这一点。

>>> result = [('a', 1), ('b', 2), ('c', 3)] 
>>> r1, r2 = zip(*result) 
>>> r1 
('a', 'b', 'c') 
>>> r2 
(1, 2, 3) 

zip(*result)解包每个列表中result并将它们作为独立参数进zip功能。它基本上是transposes的列表。它产生两个元组的列表,然后分配给r1r2

+0

谢谢您的回答! – 2013-05-12 03:27:00

+0

@scroll_lock不用担心! ;) – Volatility 2013-05-12 03:28:40

2

只需使用zip()!

result = [foo(i) for i in a] 
r1, r2 = zip(*result) 
相关问题