我知道如何删除列表中的一个元素,但如果我尝试删除许多元素,则会出现语法错误,但不知道原因。
a=[[00],[01],[10],[11]]
b=[0,3]
[[del a[x]] for x in b]
所以结果如下:
a = [[01],[10]]
非常感谢...我理解了这个问题...... del
更改了数组a
的索引,所以我会超出界限! :)
现在另一个问题提到问题......
如果我收到a
,c
并且我想创建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
的元素?
答案 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]]