Python 如何将列表附加到列表中?
我试图将一个列表附加到另一个列表中,但我似乎无法使其工作 这是代码。当我运行它并为while循环的每个迭代打印Q时,我得到类似于[2,3][2][3,4]等的东西,我想通过执行my_Q.append(Q)将这些列表附加到列表my_Q中。但是,这会返回以下结果:my_Q=[0,[],[],[]Python 如何将列表附加到列表中?,python,list,append,Python,List,Append,我试图将一个列表附加到另一个列表中,但我似乎无法使其工作 这是代码。当我运行它并为while循环的每个迭代打印Q时,我得到类似于[2,3][2][3,4]等的东西,我想通过执行my_Q.append(Q)将这些列表附加到列表my_Q中。但是,这会返回以下结果:my_Q=[0,[],[],[] import random #Matrix Input M = 10**3 G = [ [M, 5, 9, M], [M, M, 1, 10], [M, M, M,
import random
#Matrix Input
M = 10**3
G = [ [M, 5, 9, M],
[M, M, 1, 10],
[M, M, M, 4],
[M, M ,M, M] ]
#Initialize
Q = [1]
l = [0, M, M, M]
A = [1, 2, 3, 4]
iter = 0
#For display
my_v = [0]
my_Q = [1]
#Algorithm
while Q: #Stop conditions
iter += 1
#Step 2:
v = random.choice(Q)
Q.remove(v)
#Step 3:
for w in A:
l_new = min(l[w-1], l[v-1] + G[v-1][w-1])
if l_new != l[w-1]:
if w not in Q:
Q.append(w)
l[w-1] = l_new
#Save for display
my_v.append(v)
print(Q)
my_Q.append(Q)
print(my_Q)
你有问题。Python会混淆您的实现,但是将一个列表附加到另一个列表只会添加一个引用,而不是列表的值
请尝试以下简单代码:
l=[]
a=[1,2]
l、 附加(a)
a、 删除(1)
l、 附加(a)
印刷品(l)
输出
在本例中,您希望看到类似于[[1,2],[2]]
的内容,但是由于a
只是l
中的一个引用,因此在1上调用remove
将其从a
中删除外部变量及其在列表l
中的引用
您可以导入副本
并附加列表的深度副本
import copy
import random
# Matrix Input
M = 10 ** 3
G = [[M, 5, 9, M],
[M, M, 1, 10],
[M, M, M, 4],
[M, M, M, M]]
# Initialize
Q = [1]
l = [0, M, M, M]
A = [1, 2, 3, 4]
iter = 0
# For display
my_v = [0]
my_Q = [1]
# Algorithm
while Q: # Stop conditions
iter += 1
# Step 2:
v = random.choice(Q)
Q.remove(v)
# Step 3:
for w in A:
l_new = min(l[w - 1], l[v - 1] + G[v - 1][w - 1])
if l_new != l[w - 1]:
if w not in Q:
Q.append(w)
l[w - 1] = l_new
# Save for display
my_v.append(v)
print(Q)
my_Q.append(copy.deepcopy(Q))
print(my_Q)
输出
我不一定知道您的算法试图实现什么,但这将在每次迭代时将Q
的当前状态附加到my_Q
,并且不允许调用remove
来修改列表中已有的Q
的实例
如果您不想使用deepcopy from copy,可以使用切片表示法来制作副本
#我的Q.append(copy.deepcopy(Q))
我的_Q.追加(Q[:])
您遇到了一个问题。Python会混淆您的实现,但是将一个列表附加到另一个列表只会添加一个引用,而不是列表的值
请尝试以下简单代码:
l=[]
a=[1,2]
l、 附加(a)
a、 删除(1)
l、 附加(a)
印刷品(l)
输出
在本例中,您希望看到类似于[[1,2],[2]]
的内容,但是由于a
只是l
中的一个引用,因此在1上调用remove
将其从a
中删除外部变量及其在列表l
中的引用
您可以导入副本
并附加列表的深度副本
import copy
import random
# Matrix Input
M = 10 ** 3
G = [[M, 5, 9, M],
[M, M, 1, 10],
[M, M, M, 4],
[M, M, M, M]]
# Initialize
Q = [1]
l = [0, M, M, M]
A = [1, 2, 3, 4]
iter = 0
# For display
my_v = [0]
my_Q = [1]
# Algorithm
while Q: # Stop conditions
iter += 1
# Step 2:
v = random.choice(Q)
Q.remove(v)
# Step 3:
for w in A:
l_new = min(l[w - 1], l[v - 1] + G[v - 1][w - 1])
if l_new != l[w - 1]:
if w not in Q:
Q.append(w)
l[w - 1] = l_new
# Save for display
my_v.append(v)
print(Q)
my_Q.append(copy.deepcopy(Q))
print(my_Q)
输出
我不一定知道您的算法试图实现什么,但这将在每次迭代时将Q
的当前状态附加到my_Q
,并且不允许调用remove
来修改列表中已有的Q
的实例
如果您不想使用deepcopy from copy,可以使用切片表示法来制作副本
#我的Q.append(copy.deepcopy(Q))
我的_Q.追加(Q[:])
您是在寻找一个平面列表(my_Q中的每个元素都是一个值)还是一个列表列表?我希望它是一个列表列表您是在寻找一个平面列表(my_Q中的每个元素都是一个值)还是一个列表列表?我希望它是一个工作完美的列表,非常感谢!我仍然不明白问题的实质是什么,谢谢你彻底地尝试回答;但是,这是一个常见问题,最好通过引用链接的副本(可能带有简短的解释性注释)来解决。另外,在讨论Python代码时,请不要谈论“指针”;这不是我们在Python中实际使用的抽象。这里有一个别名问题,是的,但它是由在多个位置存储相同列表对象的列表导致的。当我们谈论列表如何工作的秘密细节时,我们有时会说“参考”,而不是“指针”(除非我们正在处理C实现)。OP:如果你想“理解问题是什么”,你应该阅读链接副本。非常感谢!我仍然不明白问题的实质是什么,谢谢你彻底地尝试回答;但是,这是一个常见问题,最好通过引用链接的副本(可能带有简短的解释性注释)来解决。另外,在讨论Python代码时,请不要谈论“指针”;这不是我们在Python中实际使用的抽象。这里有一个别名问题,是的,但它是由在多个位置存储相同列表对象的列表导致的。当我们谈论列表如何工作的秘密细节时,我们有时会说“参考”,而不是“指针”(除非我们正在处理C实现)。OP:如果你想“理解问题是什么”,你应该阅读链接的副本。
[1, [2, 3], [3, 4], [3], [4], []]