【问题标题】:python deleting item from a list by specifying index [duplicate]python通过指定索引从列表中删除项目[重复]
【发布时间】:2016-06-26 13:22:41
【问题描述】:

我正在尝试通过指定要删除的列表的索引来从列表中删除一个项目,但我收到了错误。

我的代码:

tuu = [1,2,3,4,'nan', 8]

for i in range(len(tuu)):
    if tuu[i] == 'nan':
        del tuu[i]

但我得到了错误:

      7 for i in range(len(tuu)):
----> 8     if tuu[i] == 'nan':
      9         del tuu[i]

IndexError: list index out of range 

【问题讨论】:

  • 尝试删除方法。
  • [i for i in lst if i != 'nan']
  • 当你想在迭代时使用range(len(list))删除for循环中的项目,你应该删除它reverse way(检查链接)
  • 也可以在不使用切片符号创建新列表的情况下就地分配:tuu[:] = [x for x in tuu if x != 'nan']

标签: python list list-comprehension


【解决方案1】:

当您使用for 循环时,Python 将在您正在循环的可迭代对象上调用__iter____iter__ 将返回一个迭代器对象,该对象跟踪您当前在可迭代对象中的位置。

如果在循环遍历它时修改了可迭代对象(列表)的长度,迭代器将会混淆。

删除 tuu[i] 后,您的列表少了一个元素,但迭代器不知道并尝试访问之前的最后一个索引 -> 这就是您获得 IndexError 的地方。

在 Python 中过滤列表的规范方法是构建一个新列表并重新分配旧列表的名称:

>>> tuu = [1, 2, 3, 4, 'nan', 8]
>>> tuu = [x for x in tuu if x != 'nan']
>>> tuu
[1, 2, 3, 4, 8]

【讨论】:

  • 在这种情况下,tuu[5] 已被删除。如果想删除另一个列表中相同索引的元素,该怎么做呢?换句话说,如何从第一个列表中找到已删除元素的索引,并从第二个列表中删除相同索引的元素?
猜你喜欢
  • 2016-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-29
  • 2013-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多