簡體   English   中英

del(item)與python list中的list.remove(item)有何不同

[英]how is del(item) different from list.remove(item) in python list

我想從長度大於3的列表中刪除單詞。我使用了del(項目),但是沒有用。 這是代碼:

lst=['XDA-OT','hi','loc','yeah']
for i in lst:
    if len(i)>3:
        del i

並輸出:

lst
['XDA-OT', 'hi', 'loc', 'yeah']

現在,我從Python List函數中使用了remove() ,並且得到了預期的結果。

這是相同的代碼:

lst=['XDA-OT','hi','loc','yeah']
for i in lst:
    if len(i)>3:
        lst.remove(i)

輸出:

print(lst)
['hi', 'loc']

我也對使用列表索引從列表中刪除元素有疑問,但不了解如何構建問題。

每當我使用索引刪除元素時,我都會得到IndexError。 碼:

lst=['XDA-OT','hi','loc','yeah']
for i in range(len(lst)):
    if len(lst[i])>3:
        del lst[i]

輸出錯誤:

IndexError                                
<ipython-input-35-617282928840> in <module>()
      1 for i in range(len(lst)):
----> 2     if len(lst[i])>3:
      3         del lst[i]

IndexError: list index out of range

與remove()函數相同。 碼:

lst=['XDA-OT','hi','loc','yeah']
for i in range(len(lst)):
    if len(lst[i])>3:
        lst.remove(lst[i])

輸出錯誤:

IndexError                                
<ipython-input-39-1d824ca5b061> in <module>()
      1 for i in range(len(lst)):
----> 2     if len(lst[i])>3:
      3         lst.remove(lst[i])

IndexError: list index out of range

通常,我會避免修改正在迭代的對象。 這可能會導致非常奇怪的行為。

您是否考慮過列表理解的解決方案? 在我看來,這種情況下最喜歡使用pythonic實現。

lst = ['XDA-OT', 'hi', 'loc', 'yeah']
lst = [itm for itm in lst if len(itm) <= 3]

您正在索引錯誤,因為您正在修改列表。 for循環收到range(4)但最后lst[4]不再存在,因為您已刪除了一些項目。

至於這個問題。 del是刪除對象的常規函數​​,而lst.remove()list類的函數。 因此,根據您的情況,您可以同時使用兩者。

我建議您使用@ b3by的方法,因為它會使用列表推導,這在python中比在執行循環時要快於for循環。

del將從所需的元素中刪除該元素。

如果在局部變量上使用,它將刪除該局部變量,因此除非重新創建該變量,否則無法再次訪問它(在global范圍內同樣適用)

list元素( del lst[2] )或dict項目( del dct['MyKey'] )相同


在您的特定情況下,您實際上是在刪除局部變量i ,而不是它所引用的元素。

如果要刪除list的特定元素,則不必將其存儲在單獨的變量中:

 del lst[i]

但是,我建議使用第二種方法,並使用list.remove (或list.pop ),因為它更加明確,並且避免了不良的副作用。


至於第二個問題,您將得到一個IndexError因為在每次迭代中您都減小了列表的大小(因為要從中刪除元素),因此您將達到i大於長度的點。列出自己。

使用del語句,您將必須指定索引。 例如

del list[0]

簡單地從列表中刪除字符串值將不適用於del函數。 但是,.remove()方法將在這種情況下工作。 作為.remove()中的參數,只需傳遞要從列表中刪除的列表項即可。 可以像這樣在for循環中工作:

lst=['XDA-OT','hi','loc','yeah']
for i in lst:
   if len(i)>3:
      lst.remove(i)

print(lst)

這是您的輸出:

['hi', 'loc']

暫無
暫無

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

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