我有一个脚本,它列出了一个代表游乐场的列表:
#Script:
import math
listx=[]
List=[]
N_M=input("Enter N M: ").split()
n=int(N_M[0])
m=int(N_M[1])
for i in range(m):
listx+=[0]
for i in range(n):
List.append(listx)
print(List)
#Example of playground for M=3 and N=3:
[0,0,0]
[0,0,0]
[0,0,0]
然后我想把某个地方改成1
List[0][1]=1
这应该(如果我理解正确)将其更改为:
[0,1,0]
[0,0,0]
[0,0,0]
但它将每个列表更改为:
[0,1,0]
[0,1,0]
[0,1,0]
请帮忙! 非常感谢您的建议
在第二个for循环中,您多次追加相同的列表,您追加的是“视图/引用”,而不是实际的列表,因此在第二个for循环中,您必须追加
listx
的副本,为此,您可以使用:list(listx)
listx[::]
listx.copy()
就像你想买苹果,但是你只有第一个苹果的一张和另外3张照片,你可以说你有4个苹果
在第二个for循环中,您将相同的列表添加到
List
n次您需要复制
listx
&;使用List
中的那些。像这样:listx[::]
制作listx
的副本以供使用此位:
将相同的列表(
listx
)添加到List
三次。因此,当您将其更改为一个位置时,所有引用都会更改,因为它们都指向同一个列表另外,作为旁注:不要用大写字母命名变量
List
,因为这会让其他人(和软件)认为它是一个类。而名称list
当然更糟糕,因为这会掩盖类型list
。提出有意义的名称,而不是像playground
这样的泛型名称创建
n
xm
列表的更有效方法:位
[0] * m
创建一个带有m
个零的列表;这是因为数字不像列表那样被引用,零也不是同一变量的副本for _ in range(n)
导致生成的列表填充这些列表中的n
。_
只是意味着你没有对来自range()
的数字做任何事情,它只是在那里重复了很多次,for
循环需要一些东西,或者是变量,或者是_
“不在乎”相关问题 更多 >
编程相关推荐