Python连接列表[重复]

Posted

技术标签:

【中文标题】Python连接列表[重复]【英文标题】:Python concatenating Lists [duplicate] 【发布时间】:2017-08-02 20:54:03 【问题描述】:

我有一个如下列表。

LED = [[255, 255, 255], [135, 234, 111], [244, 75, 128]]

您可能已经猜到这些是许多 LED 的红/绿/蓝值,我希望它们在这个结构中,因为我可以通过索引来处理代码中的每个成员。所以我可以通过将新值写入列表中的该项目来更改 LED[1] 的值。

但是,在写出它们时,我想要一个列表而不是列表列表。所以我有

For x in range (0, NumLED):
        LEDs = LEDs + LED[x]

这会给

LEDs = [255, 255, 255, 135, 234, 111, 244, 75, 128]

有没有比循环遍历更好的方法来做到这一点,对于 3 个 LED 很好,但对于数百个列表,我想每秒更新 LED 条 > 24 次,(代码中还有其他事情发生)因此,将其连接起来并节省几个周期的任何效率都会很棒。

编辑。

我测试了使用建议方法的时机

python -mtimeit -s'l=[[1,2,3],[4,5,6], [7], [8,9]]*99' 'sum(l, [])'  
100 loops, best of 3: 5.79 msec per loop  
python -mtimeit -s'l=[[1,2,3],[4,5,6], [7], [8,9]]*99' '[item for sublist in l for item in sublist]'  
1000 loops, best of 3: 308 usec per loop  

所以看起来[l 中的子列表的项目,子列表中的项目] 快了一点。

感谢大家的建议。

亚伦

在这个问题中有一个很好的解释和时间安排的不同方法

Making a flat list out of list of lists in Python

【问题讨论】:

个人板球我认为下面链接的答案比这更好。对于初学者来说,它更加完整和可读。 这可能是我想要抓住的那个,是的。 【参考方案1】:

我在这里找到了一个真正漂亮的解决方案

Making a flat list out of list of lists in Python

>>> LED = [[255, 255, 255], [135, 234, 111], [244, 75, 128]]
>>> [item for sublist in LED for item in sublist]
[255, 255, 255, 135, 234, 111, 244, 75, 128]

【讨论】:

完美谢谢你的完美:)【参考方案2】:

使用sum:

>>> LED = [[255, 255, 255], [135, 234, 111], [244, 75, 128]]
>>> sum(LED, [])
[255, 255, 255, 135, 234, 111, 244, 75, 128]

【讨论】:

有趣!标准方法似乎是列表理解的另一种方法,但这很酷。 我使用来自 Андрей Череваткин 答案的链接对这两种方法都进行了计时。两种方法都有效,但第一种方法比使用 Sum pi@Laserv3:~/APA102 $ python -mtimeit -s'l= [[1,2,3],[4,5,6], [7], [8,9]]*99' 'sum(l, [])' 100 个循环,最好的 3 个:每个循环 5.79 毫秒pi@Laserv3:~/APA102 $ python -mtimeit -s'l=[[1,2,3],[4,5,6], [7], [8,9]]*99' '[项目为l for item in sublist]' 1000 个循环,最好的 3:每个循环 308 usec pi@Laserv3:~/APA102 $ 请注意这是一个 O(N^2) 操作。每次迭代都会构建一个全新的列表,在考虑大型列表的性能时请记住这一点,这会很慢

以上是关于Python连接列表[重复]的主要内容,如果未能解决你的问题,请参考以下文章

在python 3中加速列表连接[重复]

在 Python 中使用 + 和 += 运算符进行连接 [重复]

Python数据类型

Python基础——列表

Python基础——列表

python元组或者列表太长?