gpt4 book ai didi

python - 为什么我的函数改变了一个变量而另一个没有?

转载 作者:行者123 更新时间:2023-11-28 20:55:39 25 4
gpt4 key购买 nike

我在使用 Python 时遇到了一些麻烦。我定义了一个简单的函数,它将两个列表(都包含两个元组)作为参数。在函数执行期间,元组逐渐添加到 addmap 中,而一个名为 toberemoved 的列表在函数的最后从 removemap 中删除。

两个参数都表示来自函数外部的列表。虽然列表 addmap 在函数运行后发生更改,但 removemap 保持不变。这很奇怪,因为如果我在函数中打印出 removemap,它会显示我想要的结果。我只是在外面看不到它。这里发生了什么?谢谢!

def loescheeinzelgaenger(removemap, addmap):
toberemoved = [] #lists all the list values which should be removed from the removemap and added to the addmap
for row in range(shape[0]):
for column in range(shape[1]):
if (row,column) in removemap:
# define 4 neighbours
n1 = (row - 1, column)
n2 = (row, column - 1)
n3 = (row + 1, column)
n4 = (row, column + 1)
if intersection([n1,n2,n3,n4],removemap) == []:
toberemoved.append((row, column))
addmap.append((row, column))
elif intersection([n1,n2,n3],removemap) == []:
toberemoved.append((row, column))
addmap.append((row, column))
elif intersection([n2,n3,n4],removemap) == []:
toberemoved.append((row, column))
addmap.append((row, column))
elif intersection([n1, n3,n4],removemap) == []:
toberemoved.append((row, column))
addmap.append((row, column))
elif intersection([n1,n2,n4],removemap) == []:
toberemoved.append((row, column))
addmap.append((row, column))
removemap = [x for x in removemap if x not in toberemoved]
print(removemap) #it's changed here

#further down:

print(grassMap) #initial
print(waterMap) #initial

loescheeinzelgaenger(waterMap,grassMap)

print(grassMap) #changed
print(waterMap) #unchanged

最佳答案

您的代码明确地改变了 addmap:

                addmap.append((row, column))

这将附加到现有列表。但是,您使用不同的“技术”来处理本地 removemap:

removemap = [x for x in removemap if x not in toberemoved]

这表示获取传入的 removemap,遍历其元素,过滤出您想要的元素,然后根据这些元素创建一个 列表。最后,将这个新列表分配给局部变量 removemap。由于这会将对象引用更改为新列表,因此您不再使用从调用例程传入的引用...并且 那个 removemap 变量仍然指向原始列表。

要更改原始列表,您可以小心使用remove 方法:

for rem in toberemoved:
while rem in removemap:
removemap.remove(rem)

关于python - 为什么我的函数改变了一个变量而另一个没有?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56155979/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com