Python连接列表

3

我有一个如下的列表嵌套列表。

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  

看起来使用 [item for sublist in l for item in sublist] 会更快。

感谢所有的建议。

Aaron

这个问题中有一个很好的解释,包括不同方法的说明和时间。

在Python中将列表列表变为平面列表


板球个人认为下面链接的答案比这个更好。对初学者来说更完整,更易读。 - DevilWAH
那可能是我本来想要抓取的那个,是的。 - OneCricketeer
2个回答

7

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

如何在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]

非常感谢您提供的完美内容 :) - DevilWAH

5

使用sum函数:

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

有趣!标准的方式似乎是使用列表推导式,但这种方法很酷。 - parsethis
我使用了Андрей Череваткин的答案中提供的链接来计时这两种方法。两种方法都可以工作,但第一种方法比使用“sum(l, [])”要快得多。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' '[item for sublist in l for item in sublist]' 1000次循环,最好的3次:每次循环308微秒pi@Laserv3:~/APA102 $ - DevilWAH
请注意,这是一个O(N^2)的操作。在每次迭代中,都会构建一个全新的列表,请在考虑处理大型列表时记住这一点,这可能会很慢。 - jamylak

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