将多个单独的列表合并为一个列表的列表

8
下面有三个列表,我希望将它们合并成一个嵌套列表:
List_1=[1,2,3]
List_2=[4,5,6]
List_3=[7,8,9]

My attempt:

List_x=[]
List_x.append(List_1)
List_x.append(List_2)
List_x.append(List_3)
print List_x

结果:

[[1,2,3],[4,5,6],[7,8,9]]

期望结果:与我得到的结果相同,但是由于我的实际数据规模很大,所以这种方法非常缓慢。


你是如何获取List_1List_2List_3的? - thefourtheye
所以你想要一个包含3个列表的列表,对吗?不是一个包含所有列表元素的单一(扁平化)列表。 - Stefano Sanfilippo
是的,一个包含三个列表的单一列表。 - Tiger1
无论列表中有多少数据,这个程序应该完全独立地运行得很快。 - RemcoGerlich
你的数据是否可以使用numpy数组而不是列表? - JPG
我认为Alvas提供的解决方案会更快,谢谢大家的贡献。 - Tiger1
3个回答

15
如果您需要一个嵌套列表(列表中的列表),请像这样进行连接:
>>> l1 = [1,2,3]
>>> l2 = [4,5,6]
>>> l3 = [7,8,9]
>>> l123 = [l1,l2,l3]
>>> l123
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
如果您想要一个扁平的组合列表,请使用 itertools.chain:
>>> l1 = [1,2,3]
>>> l2 = [4,5,6]
>>> l3 = [7,8,9]
>>> from itertools import chain
>>> list(chain(*[l1,l2,l3]))
[1, 2, 3, 4, 5, 6, 7, 8, 9]
如果内存空间是一个问题,您可以使用append
>>> l1 = [[1,2,3]]
>>> l1.append([4,5,6])
>>> l1.append([7,8,9])
>>> l1
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]

如果你想要一个扁平化的列表,并且内存是一个问题,使用extend

>>> l1 = [1,2,3]
>>> l1.extend([4,5,6])
>>> l1.extend([7,8,9])
>>> l1
[1, 2, 3, 4, 5, 6, 7, 8, 9]

感谢您的解决方案,alvas。 - Tiger1
为什么最后两个代码片段可以节省内存?我没有看到前两个和后两个之间有太大的区别。 - zhangxaochen

1
很棒的问题!最近我在一个代码挑战中遇到了这个问题,下面是我的编码方式。将每个列表添加到嵌套列表中只需要使用简单的.append()方法。我在函数中使用了ARGS,这样你可以通过函数传递任意多个列表,而无需对函数本身进行任何更改!
list1, list2, list3 = [1, 2, 3, 5], [1, 2, 3,4], [1, 3, 4, 5]
nested_list =[]

def nest_lists(*argv):
    for arg in argv:
        nested_list.append(arg)
    return nested_list

print(f"Your nested lists are {nest_lists(list1, list2, list3)}.")

0

嵌套列表:

>>> list_1 = [1, 2, 3]
>>> list_2 = [4, 5, 6]
>>> list_3 = [7, 8, 0]
>>> nested = [list_1, list_2, list_3]
>>> nested
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]

合并后的列表:

>>> list_1 = [1, 2, 3]
>>> list_2 = [4, 5, 6]
>>> list_3 = [7, 8, 9]
>>> merged = list_1 + list_2 + list_3
>>> merged
[1, 2, 3, 4, 5, 6, 7, 8, 9]

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