Python连接列表

时间:2017-03-12 21:38:56

标签: python list concatenation

我有一份列表清单如下。

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

您可能已经猜到这些是许多LED的红色/绿色/蓝色值,我希望它们在这个结构中,因为我可以通过索引来解决代码中的每个成员。所以我可以简单地通过在列表中为该项目写入新的vaules来改变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次,(并且代码中还有其他事情发生)因此,连接它并节省几个周期的任何效率都会很高。

EDIT。

我测试了使用sugested方法的时间

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  

所以看起来[子列表中项目的子列表项目]是qutie更快一点。

感谢大家的建议。

亚伦

在这个问题的解释和时间方面,有很好的解释这种方法

Making a flat list out of list of lists in Python

2 个答案:

答案 0 :(得分:7)

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

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]

答案 1 :(得分:5)

使用sum

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