如何在Python中进行列表操作?这很棘手
假设我有这样一个列表:
[ [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))))