在一次迭代中从元组列表中分配两个变量

时间:2013-05-12 03:06:38

标签: python

我有一个返回元组的函数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]

3 个答案:

答案 0 :(得分:5)

您可以使用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

答案 1 :(得分:2)

只需使用zip()!

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

答案 2 :(得分:0)

拉链功能会很好。 这里有一篇有用的帖子,与该函数直接相关

understanding zip function