我需要在Python中创建一个列表列表,所以我输入以下内容:
myList = [[1] * 4] * 3
Run Code Online (Sandbox Code Playgroud)
列表看起来像这样:
[[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]]
Run Code Online (Sandbox Code Playgroud)
然后我改变了最里面的一个值:
myList[0][0] = 5
Run Code Online (Sandbox Code Playgroud)
现在我的列表看起来像这样:
[[5, 1, 1, 1], [5, 1, 1, 1], [5, 1, 1, 1]]
Run Code Online (Sandbox Code Playgroud)
这不是我想要或期望的.有人可以解释一下发生了什么,以及如何解决这个问题?
真的不知道如何制定问题......
假设我执行以下操作:
>>> l = [[]]*2
>>> l
[[], []]
>>> l[0].append(1)
>>> l
[[1], [1]]
Run Code Online (Sandbox Code Playgroud)
为什么1会被附加到两个列表中?
我想要一个变量,它是一个嵌套的列表,列出了一些我可以在以后填写的空列表.看起来像:
my_variable=[[], [], [], []]
Run Code Online (Sandbox Code Playgroud)
但是,我事先并不知道我需要多少列表,只是在创建步骤,因此我需要一个变量a来确定它.我想简单my_variable=[[]]*a,但是创建了列表的副本,这不是我想要的.
我可以:
my_variable=[]
for x in range(a):
my_variable.append([])
Run Code Online (Sandbox Code Playgroud)
但我正在寻找一种更优雅的解决方案(最好是单线).有没有?
在python中[]*2,给出[]
[[],[]]取而代之的最简单的方法是什么?
我试图以一种有效的方式列出一个列表,但我无法想出任何方法来避免引用.这是我到目前为止所尝试的,显然没有成功:
>>> test=[[None]*3][:]*3
>>> test
[[None, None, None], [None, None, None], [None, None, None]]
>>> test[0][0]=0
>>> test
[[0, None, None], [0, None, None], [0, None, None]]
>>>
Run Code Online (Sandbox Code Playgroud)
这不是我想要发生的事情.我想要的是0是第一个列表中的第一个项目.我怎样才能做到这一点?
假设我的程序在启动时需要声明以下变量:
Pos_List = []
Room_List = []
Type_List = []
Spec_List = []
Sub_List = []
Rtr_List = []
IPa_List = []
MAC_List = []
Run Code Online (Sandbox Code Playgroud)
目前要做到这一点,我完全如上所示.我的问题是,有没有更短的方法来做到这一点,甚至一种方法在一条线上做到这一切?在我的程序中有几次出现这种情况,并占用了大量空间.有什么建议?谢谢.