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连接列表[重复]的主要内容,如果未能解决你的问题,请参考以下文章