我在使用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
添加
return
语句以获取所需的值:你基本上是在告诉Python:在这个函数中所做的所有事情中,我希望你给我这两个变量在函数末尾的状态
您的代码显式地改变
addmap
:这将附加到现有列表。但是,您使用不同的“技术”来处理本地
removemap
:这意味着获取传入的
removemap
,遍历它的元素,过滤掉你想要的元素,然后从这些元素中创建一个新的列表。最后,将这个新列表赋给局部变量removemap
。由于这会将对象引用更改为新列表,因此您不再使用从调用例程传入的引用。。。而这个removemap
变量仍然指向原始列表要更改原始列表,可以小心地使用
remove
方法:此行创建一个新的本地列表,该列表与传递给函数的列表无关
唯一明显的解决方案是从函数返回:
相关问题 更多 >
编程相关推荐