使用del()删除列表中的许多元素

时间:2013-09-08 12:50:25

标签: python arrays list syntax-error

我知道如何删除列表中的一个元素,但如果我尝试删除许多元素,则会出现语法错误,但不知道原因。

a=[[00],[01],[10],[11]]
b=[0,3]

[[del a[x]] for x in b]

所以结果如下:

a = [[01],[10]]

非常感谢...我理解了这个问题...... del更改了数组a的索引,所以我会超出界限! :)

现在另一个问题提到问题...... 如果我收到ac并且我想创建b

a=[[00],[01],[10],[11]]
c=[[1],[2,3,4],[5,6],[7]]

我这样走了。

b = [i for i,el in enumerate(c) for item in el if len(el)<2]

然后我这样做

a = [x for i, x in enumerate(a) if i not in b]

有一种简单的方法吗?在b中创建b然后“删除”a的元素?

4 个答案:

答案 0 :(得分:3)

使用列表理解:

>>> a=[[00],[01],[10],[11]]
>>> b=[0,3]
>>> # b = set(b)
>>> a = [x for i, x in enumerate(a) if i not in b]
>>> a
[[1], [10]]

答案 1 :(得分:1)

如果你需要删除地方的物品,你可以这样做:

map(lambda i: a.pop(i), sorted(b, key=lambda i: -i))

for i in sorted(b, key=lambda x: -x):
    del a[i]

for i in sorted(b)[::-1]:
    del a[i]

您必须在删除前对b中的项目进行排序,这样您就不会有out of range例外

答案 2 :(得分:1)

numpy有一种非常方便的删除元素的方法:

>>> import numpy as np
>>> a = np.array([[00],[01],[10],[11]])
>>> b = np.array([0,3])
>>> a
array([[ 0],
       [ 1],
       [10],
       [11]])
>>> b
array([0, 3])
>>> np.delete(a, b, axis=0)
array([[ 1],
       [10]])

答案 3 :(得分:1)

如果从列表末尾删除元素,则不会得到异常IndexError: list assignment index out of range,因为删除元素时,只会影响其后的元素:

>>> a=[[00],[01],[10],[11]]
>>> b=[0,3]
>>> for i in sorted(b, reverse=True):
...     del a[i]
...
>>> a
[[1], [10]]