如何在Python中进行列表操作?这很棘手

2 投票
8 回答
1265 浏览
提问于 2025-04-15 14:59

假设我有这样一个列表:

[ [5, 44, 73] , [7, 21, 99], [1, 32, 100] ]

我想知道,最有效的方法是什么,将它变成这个列表?

[ 5, 7, 1, 44, 21, 32, 73, 99, 100 ] 

注意,我是先取每个列表的第一个元素,然后再取每个列表的第二个元素。 当然,这个功能需要处理X个元素。

我试过了,但我的方法有很多循环,我觉得太长太复杂了。

谢谢。

8 个回答

8
import itertools
list(itertools.chain(*zip(*L1)))
import itertools
[x for x in itertools.chain(*itertools.izip_longest(*L1)) if x is not None]

如果你需要长度不一样的列表:

10

在编程中,有时候我们会遇到一些问题,比如代码运行不正常或者出现错误。这个时候,我们可以去一些技术论坛,比如StackOverflow,去寻找解决办法。在这些论坛上,很多人会分享他们的经验和解决方案,帮助其他人解决类似的问题。

在提问的时候,最好把问题描述得清楚一些,比如你遇到的具体情况、你使用的编程语言、以及你尝试过的解决方法。这样,其他人才能更好地理解你的问题,并给出有效的建议。

如果你看到别人问的问题和你的很相似,记得先看看有没有人已经回答过,这样可以节省时间,也能快速找到解决方案。

总之,技术论坛是一个很好的资源,可以帮助我们学习和解决问题,只要我们善用它。

>>> L1 =  [ [5, 44, 73] , [7, 21, 99], [1, 32, 100] ]
>>> L2 = []
>>> map(L2.extend, zip(*L1))
>>> L2
[5, 7, 1, 44, 21, 32, 73, 99, 100]
-2

只要所有的子列表长度相同:

lst = [[5, 44, 73] , [7, 21, 99], [1, 32, 100]]
list(reduce(lambda l, r: l + r, zip(*lst)))

补充:这也可以处理长度不同的子列表:

lst = [[5, 44, 73, 23] , [7, 21, 99], [1, 32, 100]]
list(filter(lambda p: p is not None, reduce(lambda x, y: x + y, map(None, *lst))))

撰写回答