我想从长度大于3的列表中删除单词。 我用del(item)但它没有用。 这是代码:
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']
另外,我对列表索引的使用有疑问,要么从列表中删除元素,但不了解如何构建问题。
每当我使用index删除元素时,我都会得到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
答案 0 :(得分:1)
作为一般规则,我会避免修改我正在迭代的对象。这可能导致非常奇怪的行为。
您是否考虑过列表理解的解决方案?在我看来,在这种情况下,最像pythonic实现。
lst = ['XDA-OT', 'hi', 'loc', 'yeah']
lst = [itm for itm in lst if len(itm) <= 3]
答案 1 :(得分:1)
您遇到索引错误,因为您正在修改列表。 for
循环会收到range(4)
,但最后lst[4]
不再存在,因为您删除了一些项目。
至于问题。 del
是删除对象的常规函数,而lst.remove()
是list
类的函数。因此,在您的情况下,您可以使用两者来实现您想要的目标。
我建议你使用@ b3by的方法,因为它使用了列表理解,这比你在{python}中的for
循环更快。
答案 2 :(得分:0)
del
会删除所需的元素。
如果在局部变量上使用它,它将删除局部变量,因此无法再次访问它,除非它被重新创建(同样适用于global
范围)
与list
个元素(del lst[2]
)或dict
个项目(del dct['MyKey']
)相同
在您的特定情况下,您实际上是删除了局部变量i
,而不是它所引用的元素。
如果要删除list
中的特定元素,则不必将其存储在单独的变量中:
del lst[i]
但是,我建议采用第二种方法并使用list.remove
(或list.pop
),因为它更明确,避免了不良的副作用。
至于你的第二个问题,你得到一个IndexError
,因为在每次迭代中你都减少了列表的大小(当你从中移除元素时),所以你将到达i
{1}}高于列表本身的长度。
答案 3 :(得分:0)
使用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']