2

我有一个foo()返回元组的函数。假设('a', 1) 我有一个可迭代对象a,我想对其进行迭代并将每个项目传递给该函数。最后,我需要两个列表 -r1其中包含从函数返回的元组r2r1的所有第一项。第二个列表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

3 回答 3

9

您可以为此使用该zip功能。

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

zip(*result) 解压缩每个列表result并将它们作为单独的参数传递给zip函数。它本质上是转置列表。它生成一个包含两个元组的列表,然后将它们分配给r1r2

于 2013-05-12T03:08:51.447 回答
2

只需使用 zip()!

result = [foo(i) for i in a]
r1, r2 = zip(*result)
于 2013-05-12T03:08:57.517 回答
0

zip 功能会很好。这是与该功能直接相关的有用帖子

了解 zip 功能

于 2013-05-12T03:12:30.167 回答