将一对对的列表/元组拆分成两个列表/元组
我有一个这样的列表:
my_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])
但我想知道有没有更优雅的解决办法。
2 个回答
40
在编程中,有时候我们会遇到一些问题,比如代码运行不正常或者出现错误。这种情况下,我们可以去一些技术论坛,比如StackOverflow,去寻找解决方案或者向其他人请教。
在这些论坛上,很多人会分享他们的经验和解决办法。你可以看到其他人遇到的类似问题,以及他们是如何解决的。这就像是一个大家互相帮助的社区,大家都在努力让编程变得更简单。
如果你在论坛上提问,记得把你的问题描述清楚,最好附上相关的代码,这样别人才能更好地理解你的问题并提供帮助。
总之,StackOverflow是一个很有用的资源,特别是当你在编程的路上遇到困难时,记得去看看,或许能找到你需要的答案。
list1 = (x[0] for x in source_list)
list2 = (x[1] for x in source_list)
538
>>> source_list = [('1','a'),('2','b'),('3','c'),('4','d')]
>>> list1, list2 = zip(*source_list)
>>> list1
('1', '2', '3', '4')
>>> list2
('a', 'b', 'c', 'd')
编辑: 注意,zip(*iterable)
是它自己的反操作:
>>> list(source_list) == zip(*zip(*source_list))
True
当把内容拆分成两个列表时,这个操作变成:
>>> list1, list2 = zip(*source_list)
>>> list(source_list) == zip(list1, list2)
True
这是 rocksportrocker 提出的补充。