2

我知道如何删除列表中的一个元素,但如果我试图删除许多元素,我会收到语法错误,但不知道为什么。

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然后“删除” bin的元素a

4

4 回答 4

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]]
于 2013-09-08T12:52:25.147 回答
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]])
于 2013-09-08T14:14:23.660 回答
1

如果您从列表末尾删除元素,您将不会得到 Exception 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]]
于 2013-09-09T08:20:41.913 回答
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异常

于 2013-09-08T13:04:31.623 回答