簡體   English   中英

Python:刪除列表中列表中的整數就是刪除所有子列表中的整數

[英]Python: Removing an integer in a list within a list is removing the integer on all sublists lists

這是我的變量:

  • availableColorsForNode:[[1、2、3],[1、2、3],[1、2、3],[1、2、3],[1、2、3],[inf]]
  • 鄰居:4
  • availableColorsForNode [neighbor]:[1、2、3]
  • adjacencyList:[[3],[2、3],[1、3],[1、2],[5],[4]
  • adjacencyList [node]:[4]
  • 顏色:1

這是代碼:

for neighbor in adjacencyList[node]:
    if color in availableColorsForNode[neighbor]: 
        availableColorsForNode[neighbor].remove(color)  #problem is here somehow

我期望:

  • availableColorsForNode:[[1、2、3],[1、2、3],[1、2、3],[1、2、3],[2、3],[inf]]

但是我得到(到處都刪除1):

  • availableColorsForNode:[[2,3],[2,3],[2,3],[2,3],[2,3],[inf]]

為什么會這樣呢? 當我進行如下所示的簡單測試時,將獲得預期的輸出:

test = [[1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3]]
test[4].remove(1)
print(test)
  • 輸出為[[1、2、3],[1、2、3],[1、2、3],[1、2、3],[2、3],[1、2、3]

我認為您更多地或像

lst = [1, 2, 3]

test = [lst, lst, lst, lst, lst]  # or: test = [lst] * 5
test[4].remove(1)
print(test)

test現在包含對同一列表的引用(而不是列表的相同副本)。 如果您對任何一個調用.remove (例如test[4].remove(1) ),更改將反映在所有它們中。 因為test所有項目仍引用相同的列表lst

關於如何解決此問題,這里有四個不同的建議(如果您的列表包含不可變的數據類型,則不需要deepcopy ); 我建議您選擇其中一種,不要混合使用; 這里的代碼只是為了展示可能性...:

from copy import copy, deepcopy

lst = [1, 2, 3]

test = [list(lst), lst[:], copy(lst), deepcopy(lst)]
test[2].remove(1)
print(test)

如果您希望重復執行此操作,則可以執行以下操作:

test = [lst[:] for _ in range(5)]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM