所以我遍歷列表中的項目以這種方式:刪除元素從列表而不指數
for virus in viruses:
do stuff
remove virus
如果我有指標,我只是做德爾病毒[i]和我能明顯調整代碼以執行諸如for index in range(0, len(viruses))
之類的操作,但是這會使代碼變得很難看,因爲我想在for循環中執行其他操作。無論如何,我可以根據我目前正在迭代的病毒名稱來刪除它們嗎?
所以我遍歷列表中的項目以這種方式:刪除元素從列表而不指數
for virus in viruses:
do stuff
remove virus
如果我有指標,我只是做德爾病毒[i]和我能明顯調整代碼以執行諸如for index in range(0, len(viruses))
之類的操作,但是這會使代碼變得很難看,因爲我想在for循環中執行其他操作。無論如何,我可以根據我目前正在迭代的病毒名稱來刪除它們嗎?
如何:
for virus in viruses[:]:
# do stuff
viruses.remove(virus) # remove "virus" from the original list
viruses[:]
創建了我們的viruses
名單的副本。作爲一個說明,你也可以使用list(oldlist)
來複制列表(我發現它更具可讀性,但兩者都可以工作)。你可以閱讀更多關於python here的列表。
列表有一個方法remove()
,使用您可以通過值刪除元素,
,如果你在它修改清單,以及迭代,那麼你應該使用reversed()
,否則迭代將錯過一些元素:
for virus in reversed(viruses):
viruses.remove(virus)
一個簡單的例子:
In [203]: lis=range(0,10)
In [206]: for x in reversed(lis):
.....: if x%2==0: #remove even numbers
.....: lis.remove(x)
.....:
.....:
In [207]: lis
Out[207]: [1, 3, 5, 7, 9]
,或者使用一個淺拷貝:
In [212]: lis=range(10)
In [213]: for x in lis[:]:
if x%2==0:
lis.remove(x)
.....:
.....:
In [216]: lis
Out[216]: [1, 3, 5, 7, 9]
要由它的價值刪除一個項目只使用list.remove()
:
從列表中刪除元素,而你是遍歷它可能會導致一些意想不到的問題,所以一定要確保你在副本迭代:
for virus in viruses[:]:
# do stuff
viruses.remove(virus)
雖然您的其中一個選項是使用remove()
,但可能會返回錯誤。另一種選擇是治療病毒(這被認爲是一個列表)作爲堆棧(或隊列)
for _ in xrange(len(viruses)):
virus = viruses.pop()
# do stuff with virus
如果viruses
是不是一本字典(和virus
的關鍵),則關鍵是你所需要的將其刪除:
import copy
for virus in copy.copy(viruses):
# do stuff with virus
del viruses[virus]
瞭解更多信息
您不能更改一本字典,當你迭代它見http://docs.python.org/tutorial/datastructures.html。 'RuntimeError:迭代期間字典更改大小 ' –