我有一个元组列表,如下所示:
提前感谢您的帮助。
[(12,1),(123,4),(33,4)]
,我想把它变成[12,123,33]
和[1,4,4]
。请问我该怎么做?提前感谢您的帮助。
[(12,1),(123,4),(33,4)]
,我想把它变成[12,123,33]
和[1,4,4]
。请问我该怎么做?您可以使用zip()函数:
zipped = [(12, 1), (123, 4), (33, 4)]
>>> b, c = zip(*zipped)
>>> b
(12, 123, 33)
>>> c
(1, 4, 4)
或者您可以使用列表推导式来实现类似的效果:
>>> b, c = [e[0] for e in zipped], [e[1] for e in zipped]
>>> b
[12, 123, 33]
>>> c
[1, 4, 4]
不同之处在于,一个给你一个元组列表(zip
),另一个给你两个列表的元组(使用两个列表推导式)。
在这种情况下,zip
可能是更Pythonic并且速度更快的方法。
这是使用zip()
的完美案例:
In [41]: l = [(12,1), (123,4), (33,4)]
In [42]: a, b = map(list, zip(*l))
In [43]: a
Out[43]: [12, 123, 33]
In [44]: b
Out[44]: [1, 4, 4]
a
和 b
是元组而不是列表,那么您可以删除 map(list, ...)
并保留 a, b = zip(*l)
。zip(*l)
,然后,在极少需要列表而不是元组的情况下,使用map()
来创建它们。99%的时间,你不需要这样做。 - Gareth Lattyl
可以是任何可迭代对象吗? - Inyoung Kim 김인영first_list = []
second_list = []
for tup in list_of_tuples:
first_list.append(ls[0])
second_list.append(ls[1])
zip
更快:https://dev59.com/iWsz5IYBdhLWcg3wLEm8#47148258 - franklsf95
zip()
。把最糟糕的方法放在第一位最多是误导性的。 - Gareth Latty