簡體   English   中英

在Python中從List中刪除元素

[英]Removing elements from a List in Python

我正在使用python 3.4並只是學習基礎知識,所以請忍受我。

listA = [1,2]
for a in listA:
    listA.remove(a)
print(listA)

假設我得到一個空列表,但我得到的是一個值為'2'的列表。 我用大號調試代碼。 列表中的值以及列表具有單個元素時for循環退出。 為什么最后一個元素沒有從列表中刪除..?

遍歷列表時,請勿更改列表。 當您刪除項目時,列表的索引會更改,因此某些項目將永遠不會被評估。 改為使用列表推導,它會創建一個新列表:

[a for a in list if ...]

換句話說,嘗試這樣的事情:

>>> A = [1, 2, 3, 4]
>>> A = [a for a in A if a < 4]       # creates new list and evaluates each element of old
>>> A
[1, 2, 3]

使用for循環時,使用內部計數器。 如果在迭代list時將剩余元素向左移動,則不會評估剩余list最左側的元素。 請參閱for語句注釋

發生這種情況是因為for的長度僅在開始時進行評估,並在循環時修改列表:

>>> l = [1,2,3]
>>> l
[1, 2, 3]
>>> for a in l:
    print(a)
    print(l)
    l.remove(a)
    print(a)
    print(l)
    print("---")


1
[1, 2, 3]
1
[2, 3]
---
3
[2, 3]
3
[2]
---
>>>

看到? 用於索引列表並在其上循環的隱式變量的值會增加並跳過第二個元素。

如果要清空列表,請執行以下操作:

>>> l.clear()
>>> l
[]

或者,如果需要在遍歷列表時對其進行修改,請使用另一種遍歷列表的方法。

正如@Justin在評論中提到的那樣,在迭代列表時不要更改列表。 當您繼續從列表中刪除元素時,列表的大小會縮小,這將更改元素的索引。

如果需要逐個從列表中刪除元素,則迭代列表副本,保留原始列表,同時修改流程中的重復列表。

>>> listA = [1,2,3,4]
>>> listB = [1,2,3,4]

>>> for each in listA:
...     print each
...     listB.remove(each)
1
2
3
4
>>> listB
[]

暫無
暫無

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

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