我需要一个元组列表中所有第一个元素的顺序列表和所有第二个元素的另一个顺序列表。

sset = [('foo',1),('bar',3),('zzz',9)]
x = ['foo','bar','zzz']
y = [1,3,9]


我这样做是这样的:

x = [i for i,j in sset]
y = [j for i,j in sset]


有没有更简单的方法?

我可以使用dict.keys()dict.values(),但是列表的顺序是否保留?另外,如果我的元组有> 2个元素,则dict技巧不起作用。

x,y = dict(sset).keys(), dict(sset).values()

最佳答案

您可以使用zip(),并使用splat任意参数语法sset应用*args

x, y = zip(*sset)


演示:

>>> sset = [('foo',1),('bar',3),('zzz',9)]
>>> x, y = zip(*sset)
>>> x
('foo', 'bar', 'zzz')
>>> y
(1, 3, 9)


这将创建元组,而不是列表。您可以根据需要将zip()输出映射到列表:

x, y = map(list, zip(*sset))

10-08 10:54