Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将成对的列表/元组解压为两个列表/元组_Python_List_Tuples - Fatal编程技术网

Python 将成对的列表/元组解压为两个列表/元组

Python 将成对的列表/元组解压为两个列表/元组,python,list,tuples,Python,List,Tuples,可能重复: 我有一个如下列表: list = (('1','a'),('2','b'),('3','c'),('4','d')) 我想把这个列表分成两个列表 list1 = ('1','2','3','4') list2 = ('a','b','c','d') 我可以这样做,例如: list1 = [] list2 = [] for i in list: list1.append(i[0]) list2.append(i[1]) 但我想知道是否有更优雅的解决方案 list1

可能重复:

我有一个如下列表:

list = (('1','a'),('2','b'),('3','c'),('4','d'))
我想把这个列表分成两个列表

list1 = ('1','2','3','4')
list2 = ('a','b','c','d')
我可以这样做,例如:

list1 = []
list2 = []
for i in list:
   list1.append(i[0])
   list2.append(i[1])
但我想知道是否有更优雅的解决方案

list1 = (x[0] for x in source_list)
list2 = (x[1] for x in source_list)
编辑:请注意,
zip(*iterable)
是它自己的反义词:

>>> list(source_list) == zip(*zip(*source_list))
True
当解包为两个列表时,将变成:

>>> list1, list2 = zip(*source_list)
>>> list(source_list) == zip(list1, list2)
True

rocksportrocker建议添加。

请不要为变量使用内置类型名称。不要叫它
list
。一旦创建了变量
list
,就会发生奇怪的事情,因为内置函数
list()
现在被变量隐藏了。这是一个元组,而不是列表。在Python中保持它们的直截了当是很重要的,即使它们可以类似地使用。如果您需要实际的
列表
s,您可以编制索引,您应该使用方括号
[]
而不是圆括号,以使它们列出理解,而不是生成器表达式。-1,使用zip()的解决方案更像是蟒蛇,没有两个loops@naeg,这是一个完全正确的python表达式。你甚至可以为缺乏训练的程序员辩解,这是一个更好的解决方案,而不是使用相当模糊的<代码> zip(*…)语法。@ KiLiangs:嗯,我不认为zip()函数和解包是复杂的还是模糊的?由于zip答案有更多的向上投票,我想其他人也有同样的想法。这取决于原始列表中元组的长度。如果未知或超过2,zip(*)更好,否则,这里的解决方案也很好。对于OP来说,如果您不知道“splat”操作符,这会很有帮助。我想指出,
zip(*list\u of_pairs)
的结果不是一对
list
而是
tuple
。在某些情况下,差异可能很重要(例如附加到它)。因此,示例中的
list1
list2
应该是
tuple1
tuple2
@因果关系绝对正确。我使用了问题中使用的相同名称,它们也是
tuple
s。这个错误在最初发布时的一篇评论中被指出:@agf,你说得对。我错过了那个评论。这真是太棒了!拉链是它自己的反面。
>>> list1, list2 = zip(*source_list)
>>> list(source_list) == zip(list1, list2)
True