python 中的 append 方法在嵌套 for 循环中未按预期工作
append method in python not working as expected in nested for loops
我想使用嵌套 for 循环将一个列表附加到另一个列表中,但代码没有按预期工作
def apend():
ls = []
numbers = [0,0]
for num1 in range(3):
for num2 in range(2):
numbers[0] = num1
numbers[1] = num2
ls.append(numbers)
print(ls)
apend()
我希望输出为:[[0,0],[0,1],[0,2],1,0],[1,1],[1,2]]
但我得到了这个输出:[[1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2]]
只需将数字更改为数字[:],您就会得到预期的输出。
ls.append(numbers)
表示您正在附加列表的引用。
所以当列表改变时,所有实例都会改变。
当你这样做时 ls.append(numbers[:])
这会附加一个数字的副本。
def apend():
ls = []
numbers = [0,0]
for num1 in range(3):
for num2 in range(2):
numbers[0] = num1
numbers[1] = num2
ls.append(numbers[:])
print(ls)
apend()
您正在循环中附加名为数字的列表。
只需追加一个新的列表对象,如下所示。
def apend():
ls = []
numbers = [0,0]
for num1 in range(3):
for num2 in range(2):
numbers[0] = num1
numbers[1] = num2
ls.append(list(numbers)) # append a new list object
print(ls)
顺便说一句,我想对这个函数使用列表理解。
def append():
ls = [[x, y] for x in range(3) for y in range(2)]
print(ls)
你可以这样做:
def apend():
ls=[]
numbers=[0,0]
for num1 in range(3):
for num2 in range(2):
numbers[0]=num1
numbers[1]=num2
ls.append(num.copy())
print(ls)
apend()
如果您 运行 您在 http://pythontutor.com/ 上的代码,那么您会看到
列表 ls
中的所有元素都引用同一个列表 numbers
,这会产生问题。
您必须在 for
-loop
中创建新列表 numbers = [0,0]
for num1 in range(3):
for num2 in range(2):
numbers = [0,0]
numbers[0] = num1
numbers[1] = num2
ls.append(numbers)
或者干脆不用 numbers
for num1 in range(3):
for num2 in range(2):
ls.append([num1, num2])
我想使用嵌套 for 循环将一个列表附加到另一个列表中,但代码没有按预期工作
def apend():
ls = []
numbers = [0,0]
for num1 in range(3):
for num2 in range(2):
numbers[0] = num1
numbers[1] = num2
ls.append(numbers)
print(ls)
apend()
我希望输出为:[[0,0],[0,1],[0,2],1,0],[1,1],[1,2]]
但我得到了这个输出:[[1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2]]
只需将数字更改为数字[:],您就会得到预期的输出。
ls.append(numbers)
表示您正在附加列表的引用。
所以当列表改变时,所有实例都会改变。
当你这样做时 ls.append(numbers[:])
这会附加一个数字的副本。
def apend():
ls = []
numbers = [0,0]
for num1 in range(3):
for num2 in range(2):
numbers[0] = num1
numbers[1] = num2
ls.append(numbers[:])
print(ls)
apend()
您正在循环中附加名为数字的列表。 只需追加一个新的列表对象,如下所示。
def apend():
ls = []
numbers = [0,0]
for num1 in range(3):
for num2 in range(2):
numbers[0] = num1
numbers[1] = num2
ls.append(list(numbers)) # append a new list object
print(ls)
顺便说一句,我想对这个函数使用列表理解。
def append():
ls = [[x, y] for x in range(3) for y in range(2)]
print(ls)
你可以这样做:
def apend():
ls=[]
numbers=[0,0]
for num1 in range(3):
for num2 in range(2):
numbers[0]=num1
numbers[1]=num2
ls.append(num.copy())
print(ls)
apend()
如果您 运行 您在 http://pythontutor.com/ 上的代码,那么您会看到
列表 ls
中的所有元素都引用同一个列表 numbers
,这会产生问题。
您必须在 for
-loop
numbers = [0,0]
for num1 in range(3):
for num2 in range(2):
numbers = [0,0]
numbers[0] = num1
numbers[1] = num2
ls.append(numbers)
或者干脆不用 numbers
for num1 in range(3):
for num2 in range(2):
ls.append([num1, num2])