将一对对的列表/元组拆分成两个列表/元组

280 投票
2 回答
236378 浏览
提问于 2025-04-17 03:07

我有一个这样的列表:

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 提出的补充。

撰写回答