将列表元素插入列表列表的python方法?

将列表元素插入列表列表的python方法?,python,list,Python,List,例如,让我们有: nodes = [[1, 2],[3, 4]] thelist = [[5, 6], [7, 8]] 如何对其进行编码,以便列表为: [[1, 2],[3, 4],[5, 6],[7, 8]] 我知道怎么做,但我想要一种优雅的python方式 我的尝试: for node in nodes: thelist.insert(0, node) 我想应该有一种更像蟒蛇的方式来做到这一点 编辑:顺序在某种程度上很重要(这就是我尝试在索引0处插入的原因)。只需将它们相加:

例如,让我们有:

nodes = [[1, 2],[3, 4]] 
thelist = [[5, 6], [7, 8]]
如何对其进行编码,以便列表为:

[[1, 2],[3, 4],[5, 6],[7, 8]]
我知道怎么做,但我想要一种优雅的python方式

我的尝试:

for node in nodes:
    thelist.insert(0, node)
我想应该有一种更像蟒蛇的方式来做到这一点


编辑:顺序在某种程度上很重要(这就是我尝试在索引0处插入的原因)。

只需将它们相加:

In [11]: nodes + thelist
Out[11]: [[1, 2], [3, 4], [5, 6], [7, 8]]
还可以使用“扩展”(用于修改节点):


只需将它们加在一起:

In [11]: nodes + thelist
Out[11]: [[1, 2], [3, 4], [5, 6], [7, 8]]
还可以使用“扩展”(用于修改节点):


您可以将列表[:0]指定给切片
以在开头插入元素:

nodes = [[1, 2],[3, 4]]
thelist = [[5, 6], [7, 8]]
thelist[:0] = nodes
# thelist is now [[1, 2], [3, 4], [5, 6], [7, 8]]

请参阅Python教程以了解。

您可以将列表[:0]
指定给切片,以便在开头插入元素:

nodes = [[1, 2],[3, 4]]
thelist = [[5, 6], [7, 8]]
thelist[:0] = nodes
# thelist is now [[1, 2], [3, 4], [5, 6], [7, 8]]

参见Python教程了解。

或者,如果某种顺序很重要,或者只是能够一次获取一个项目,那么您可以使用
heapq.merge

import heapq

nodes = [[1, 2],[3, 4]]
thelist = [[5, 6], [7, 8]] 
res = list(heapq.merge(nodes, thelist))
# [[1, 2], [3, 4], [5, 6], [7, 8]]

nodes = [[1, 2], [5,6]]
thelist = [[3, 4], [7, 8]]    
res = list(heapq.merge(nodes, thelist))
# [[1, 2], [3, 4], [5, 6], [7, 8]]
或者,只需使用:

for heapq.merge(nodes, thelist):

请注意,顺序可能不同于
itertools.chain

或者,如果某种顺序很重要,或者只是能够一次取一个项目,那么您可以使用
heapq.merge

import heapq

nodes = [[1, 2],[3, 4]]
thelist = [[5, 6], [7, 8]] 
res = list(heapq.merge(nodes, thelist))
# [[1, 2], [3, 4], [5, 6], [7, 8]]

nodes = [[1, 2], [5,6]]
thelist = [[3, 4], [7, 8]]    
res = list(heapq.merge(nodes, thelist))
# [[1, 2], [3, 4], [5, 6], [7, 8]]
或者,只需使用:

for heapq.merge(nodes, thelist):


请注意,顺序可能不同于
itertools.chain

+1。这将分配给一个片,这正是OP所要求的。虽然OP要求对列表进行变异,但更常见的模式是创建一个新列表并重新分配给相同的名称:
theList=nodes+theList
+1,这是我不知道的一些有趣的语法:p这个解决方案实际上可以在一些书中找到,它非常优雅,我想我错过了它,因为我来自其他语言,在那里切片是不可能的。非常感谢。这将分配给一个片,这正是OP所要求的。虽然OP要求对列表进行变异,但更常见的模式是创建一个新列表并重新分配给相同的名称:
theList=nodes+theList
+1,这是我不知道的一些有趣的语法:p这个解决方案实际上可以在一些书中找到,它非常优雅,我想我错过了它,因为我来自其他语言,在那里切片是不可能的。非常感谢。互联网上的任何Python书籍或教程都会教你如何连接列表。顺便说一下,不要将
insert
与索引
0
处的
列表一起使用。它会导致重新分配整个
列表。列表被优化为附加而不是前置。我知道如何连接,大多数书都会用类似post sza提到的列表来教授示例。但在这种情况下,我将面对列表列表和充满列表的列表列表哈哈。我找不到像你发布的那样好的答案。编辑:哦,我没有在索引0处插入,因为顺序有点重要,我要把它添加到OP中。@sza不是重复的,我想,因为链接问题的正确答案是
extend
,这在这里不适用。还有,为什么这会被否决?在这种情况下,可能有更好的方法来实现这一点,但这并不会使问题无效。正如标题中的措辞,这个问题是完全正确的。除了迭代组合结果,您还需要做什么吗?否则,
itertools.chain
可能就是您想要的。如果您经常插入,并且不需要按索引检索项目,您可能需要
collections.deque
。internet上的任何Python书籍或教程都会教您如何连接列表。顺便说一下,不要将
insert
与索引
0
处的
列表一起使用。它会导致重新分配整个
列表。列表被优化为附加而不是前置。我知道如何连接,大多数书都会用类似post sza提到的列表来教授示例。但在这种情况下,我将面对列表列表和充满列表的列表列表哈哈。我找不到像你发布的那样好的答案。编辑:哦,我没有在索引0处插入,因为顺序有点重要,我要把它添加到OP中。@sza不是重复的,我想,因为链接问题的正确答案是
extend
,这在这里不适用。还有,为什么这会被否决?在这种情况下,可能有更好的方法来实现这一点,但这并不会使问题无效。正如标题中的措辞,这个问题是完全正确的。除了迭代组合结果,您还需要做什么吗?否则,
itertools.chain
可能就是您想要的。如果您经常插入,不需要按索引检索项目,您可能需要
collections.deque
。我很好奇为什么
heapq.merge
over
itertools.chain
。使用一个比另一个有好处吗?@StevenRumbalski请看第二个示例,列表是按排序的。确实有用!但我想这并不像我说的那么像蟒蛇。@MarceloZárate如果你想按顺序合并序列,这绝对是蟒蛇式的。。。如果你只想对序列进行编码,请使用你得到的任何其他答案:)@MarceloZárate:Jon Clements的声誉超过3万来自于回答Python问题。默认情况下,你应该首先问问自己,为什么他认为他的答案是蟒蛇式的。(注意——我并不是说高声誉的回答者是绝对正确的,但他们通常是一个很好的来源。)我很好奇为什么
heapq.merge
over
itertools.chain
。使用一个比另一个有好处吗?@StevenRumbalski请看第二个示例,列表是按排序的。确实有用!但我想这并不像我说的那么像蟒蛇。@MarceloZárate如果你想按顺序合并序列,这绝对是蟒蛇式的。。。如果你只是想对序列进行编码,请使用你得到的任何其他答案:)@MarceloZárate:Jon Clements repu超过3万个