我嘗試刪除數據庫中比選定字符i小的所有字符。數據庫是一系列字符列表。刪除函數更改無關循環的元素(Python)
def project(database, i):
test = database.copy()
for idx,lists in enumerate(database.copy()):
for char in lists:
print(char)
if char <= i:
test[idx].remove(char)
return test
a = [['A','B','D'],['A','B','C','D']]
print(project(a, 'C'))
Output:
A D A C
[['B', 'D'], ['B', 'D']]
不知何故,代碼從不檢查'B',儘管它在列表中。沒有如果條件+刪除線(5-6行)相同的代碼執行以下操作:
Output:
A B D A B C D
['A', 'B', 'D'], ['A', 'B', 'C', 'D']]
爲什麼印刷字符變化雖然不改變迭代名單?
'test'不是'database'的副本。嗯,它是 - 但它是一個淺拷貝。它包含對原始內部列表的引用。您需要深層複製。 – DyZ
我擔心改變我正在迭代的矩陣可能會解釋奇怪的行爲。我只是檢查沒有所有副本的代碼,它也是如此。 –
請閱讀答案,其中至少有一個解釋如何製作深層複印件。 – DyZ