del(item)与python list

时间:2018-06-08 09:57:18

标签: python

我想从长度大于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

4 个答案:

答案 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']