我在启用刽子手列表中的功能时遇到问题。这是问题代码示例 - 由于其长度而缩写:
board=[]#A matrix to which I append required letters
def func(list1):
does sth with list1
return list1
def func2(list2):
does sth with list2
return list2
def func3(list3):
does sth with list3
return list3
f1=func(board)
f2=func2(f1)
f3=func3(f2)
list_of_func=[f1, f2, f3]
count=0
if sth happens:
print(list_of_func[count])
count+=1
但是,它不会打印逐步修改的板,而是打印完全更改的板 - 由所有功能更改。如何阻止 Python 改变整个板子?
最佳答案
您正在函数中传递对同一列表的引用。这意味着,您在 func()
中修改的列表与在其他函数中修改的列表相同。
您可以创建列表的副本,以便在每个步骤后都保留列表的副本。您可以使用切片表示法来实现此目的:
f1 = func(board[:])
f2 = func2(f1[:])
f3 = func3(f2[:])
或者内置的list()
:
f1 = func(list(board))
f2 = func2(list(f1))
f3 = func3(list(f2))
这样,f1
、f2
和 f3
将分别保存对不同列表的引用。
关于python - 逐渐从函数列表中调用函数(无需生成器),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54487335/