Python中的列表推导式用于合并不同的列表

3

我需要绘制大量的数据样本,每个样本都存储在一个整数列表中。我想要从许多连接的列表中创建一个列表,以便使用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仅为示例(实际上还有其他语句来绘制点)。
我的问题是: 是否有更好的方法,例如列表推导式或其他操作,可以在不使用循环和预先声明空列表的情况下实现相同的结果(合并列表)?
谢谢

我不知道你想要实现什么目标。 - Falmarri
@ Falmarri:我写的代码似乎不符合Pythonic风格,所以我正在寻找一种避免典型的空列表声明,然后通过循环逐个填充列表的方法。 - heltonbiker
2个回答

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()视为管理单个列表的迭代器。它会记住你所在的列表和列表中的位置。这样可以节省创建大型列表所需的所有内存。

答案有效,并且确实是我所要求的。另一方面,它似乎太冗长了...但我想不出更好的方法(除了使用numpy.ndarray来记录,这样我就可以直接切片了...)。非常感谢!(我的当前代码已经包含了你的一行代码; o) - heltonbiker
如果您不喜欢单行版本,可以将其拆分:big_iter = itertools.chain(*(recordings[n][chosen_channel] for n in xrange(number_of_lists))for x,y in enumerate(big_iter) - Andrew Clark

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]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接