使用列表推导合并Python中的多个列表

3 投票
2 回答
1950 浏览
提问于 2025-04-16 12:30

我需要绘制很多数据样本,每个样本都是一个整数列表。我想把这些连接在一起的列表合并成一个大列表,这样我就可以用enumerate(big_list)来绘制图形,这样可以得到固定的x坐标。

我现在的代码是:

biglist = []
for n in xrange(number_of_lists):
    biglist.extend(recordings[n][chosen_channel])
for x,y in enumerate(biglist):
    print x,y

说明:number_of_lists和chosen_channel是其他地方定义的整数参数,print x,y只是个例子(实际上还有其他语句来绘制这些点)。

我的问题是:有没有更好的方法,比如使用列表推导式或者其他操作,来实现同样的结果(合并列表),而不需要使用循环和预先声明的空列表?

谢谢

2 个回答

3

在编程中,有时候我们会遇到一些问题,像是代码运行不正常或者出现错误。这些问题可能是因为我们没有正确理解某些概念或者使用了不合适的代码。

比如说,变量就像一个盒子,我们可以把东西放进去,也可以随时拿出来。可是如果我们把盒子放错地方,或者用错了盒子,就会导致问题。

另外,函数就像是一个小工厂,我们把原材料(输入)送进去,工厂会加工这些材料,然后给我们成品(输出)。如果我们给工厂的原材料不对,或者工厂的机器坏了,最后的成品就会出错。

所以,理解这些基本概念非常重要,这样才能更好地解决问题,写出正确的代码。

>>> import itertools
>>> l1 = [2,3,4,5]
>>> l2=[9,8,7]
>>> itertools.chain(l1,l2)
<itertools.chain object at 0x100429f90>
>>> list(itertools.chain(l1,l2))
[2, 3, 4, 5, 9, 8, 7]
4
import itertools
for x,y in enumerate(itertools.chain(*(recordings[n][chosen_channel] for n in xrange(number_of_lists))):
    print x,y

你可以把 itertools.chain() 想象成一个管理多个列表的小工具。它会记住你正在查看哪个列表,以及在这个列表中的位置。这样做的好处是,你不需要创建一个很大的列表,从而节省了很多内存。

撰写回答