[英]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.