使用python删除列表中的最后几个组件

时间:2017-11-28 17:35:01

标签: python

a=[3,2,2,3]
a.sort()
a.pop(a[3])
print(a)
a.pop(a[2])
print(a)

我想在排序后删除列表a中的最后两个元素,但是我收到此错误:

  [2, 2, 3]
  Traceback (most recent call last):
    File "E:/Project/8.py", line 5, in <module>
    a.pop(a[2])
  IndexError: pop index out of range

7 个答案:

答案 0 :(得分:4)

pop(i)弹出列表中索引i的元素。执行a.pop(a[3])时,您将在索引a[3]=3处弹出元素。如果你想弹出最后一个元素,只需执行a.pop()而没有任何参数,它将隐式弹出最后一个元素。

答案 1 :(得分:2)

您收到错误的原因是因为您通过从列表中检索整数来查找要弹出的索引,因此通过执行a[2],您首先获取值3显然这超出了列表的范围。

如上所述,只需在没有参数pop

的情况下拨打pop()即可

答案 2 :(得分:2)

只需使列表等于自己减去最后两个元素。

a=[3,2,2,3]
a.sort()
a=a[:-2]

答案 3 :(得分:1)

首先,pop能够删除最后一个元素,您不需要指定参数。 删除排序,因为它没有太大变化,你得到:

a=[2,2,3,3]
a.pop()
print(a)
a.pop()
print(a)

它应该做你想要的。

更多背景和解释

作为explained in the docs,如果您可选地将参数指定为pop - 它将接受要删除的元素的索引。 所以在更简单的代码中:

a=[3,2,2,3]
a.pop(a[3])

这意味着:

  • a[3] - 获取列表的第三个元素,它是3(记住这是0索引)
  • 所以在这种情况下a.pop(a[3])恰好与a.pop(3)
  • 相同
  • 所以它删除了第三个元素

现在您的错误发生了,因为您a.pop(a[2])再次为3,且列表太短。

答案 4 :(得分:1)

其他人已经指出了您的使用错误。

更简单,只需获取您想要的列表:

a = sorted(a)[:-2]

这会对列表进行排序,删除最后两个条目,并将结果分配回a

>>> a = [5, 8, 3, 2]
>>> a = sorted(a)[:-2]
>>> a
[2, 3]

答案 5 :(得分:0)

只需使用pop功能两次,不需要像这样的参数:

a.pop()
a.pop()

答案 6 :(得分:0)

如果要删除最后一个元素,则不需要将参数传递给pop。只需调用a.pop()两次。

问题在于你没有传递索引,而是在确定位置传递数组的值。弹出[3]时,值为3且该索引不再存在,因为数组大小为3,最后一个索引为2.