Python 将两行列表理解合并为一行

Python 将两行列表理解合并为一行,python,list,tuples,Python,List,Tuples,我有一个元组列表,如下所示: loft = [(1, 2), (3, 4), (5, 6)] odd = [1, 3, 5] even = [2, 4, 6] odd = [x[0] for x in loft] even = [x[1] for x in loft] 我希望结果是这样的: loft = [(1, 2), (3, 4), (5, 6)] odd = [1, 3, 5] even = [2, 4, 6] odd = [x[0] for x in loft] even =

我有一个元组列表,如下所示:

loft = [(1, 2), (3, 4), (5, 6)]
odd = [1, 3, 5]
even = [2, 4, 6]
odd = [x[0] for x in loft]
even = [x[1] for x in loft]
我希望结果是这样的:

loft = [(1, 2), (3, 4), (5, 6)]
odd = [1, 3, 5]
even = [2, 4, 6]
odd = [x[0] for x in loft]
even = [x[1] for x in loft]
我可以这样做:

loft = [(1, 2), (3, 4), (5, 6)]
odd = [1, 3, 5]
even = [2, 4, 6]
odd = [x[0] for x in loft]
even = [x[1] for x in loft]
但我需要在一行中完成。我试过这个:

odd, even = [x[0], x[1] for x in loft]
但给了我一个错误:

File "<stdin>", line 1
    odd, even = [x[0], x[1] for x in loft]
                         ^
SyntaxError: invalid syntax
文件“”,第1行
奇数,偶数=[x[0],x[1]表示放样中的x]
^
SyntaxError:无效语法

可以在一行中完成吗?

您可以使用
zip
解包:

loft = [(1, 2), (3, 4), (5, 6)]
odd, even = zip(*loft)
输出:

(1, 3, 5)
(2, 4, 6)
[1, 3, 5]
[2, 4, 6]
如果希望结果是
list
s,而不是
tuple
s,可以使用
map

loft = [(1, 2), (3, 4), (5, 6)]
odd, even = map(list, zip(*loft))
输出:

(1, 3, 5)
(2, 4, 6)
[1, 3, 5]
[2, 4, 6]