将两行列表理解合并为一

Ami*_*ani 3 python tuples list

我有一个元组列表,像这样:

loft = [(1, 2), (3, 4), (5, 6)]
Run Code Online (Sandbox Code Playgroud)

我希望结果是这样的:

odd = [1, 3, 5]
even = [2, 4, 6]
Run Code Online (Sandbox Code Playgroud)

我可以这样实现:

odd = [x[0] for x in loft]
even = [x[1] for x in loft]
Run Code Online (Sandbox Code Playgroud)

但是我需要一行完成。我尝试了这个:

odd, even = [x[0], x[1] for x in loft]
Run Code Online (Sandbox Code Playgroud)

但是给我这个错误:

File "<stdin>", line 1
    odd, even = [x[0], x[1] for x in loft]
                         ^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)

可以一行完成吗?

Aja*_*234 6

您可以通过以下方式使用解包功能zip

loft = [(1, 2), (3, 4), (5, 6)]
odd, even = zip(*loft)
Run Code Online (Sandbox Code Playgroud)

输出:

(1, 3, 5)
(2, 4, 6)
Run Code Online (Sandbox Code Playgroud)

如果希望结果是lists而不是tuples,则可以使用map

loft = [(1, 2), (3, 4), (5, 6)]
odd, even = map(list, zip(*loft))
Run Code Online (Sandbox Code Playgroud)

输出:

[1, 3, 5]
[2, 4, 6]
Run Code Online (Sandbox Code Playgroud)