我正在尝试使用列表推导通过仅保留未指定的项目来从列表中删除许多项目。
例如,如果我有 2 个列表a = [1,3,5,7,10]
,并且b = [2,4]
我想保留其中的所有项目a
不在与b
.
现在,我尝试使用y = [a[x] for x not in b]
,但这会产生 SyntaxError。
y = [a[x] for x in b]
工作正常,只保留我想要删除的元素。
那么我该如何实现呢?顺便说一句,这是一个好方法还是我应该使用del
?
我正在尝试使用列表推导通过仅保留未指定的项目来从列表中删除许多项目。
例如,如果我有 2 个列表a = [1,3,5,7,10]
,并且b = [2,4]
我想保留其中的所有项目a
不在与b
.
现在,我尝试使用y = [a[x] for x not in b]
,但这会产生 SyntaxError。
y = [a[x] for x in b]
工作正常,只保留我想要删除的元素。
那么我该如何实现呢?顺便说一句,这是一个好方法还是我应该使用del
?
您可以enumerate()
在以下位置使用和查找索引b
:
>>> a = [1, 3, 5, 7, 10]
>>> b = [2, 4]
>>> [item for index, item in enumerate(a) if index not in b]
[1, 3, 7]
请注意,为了缩短查找时间,最好将其b
作为集合而不是列表。平均而言,在列表中查找集合O(1)
- 列表的长度在O(n)
哪里。n
猜猜你正在寻找类似的东西:
[ x for x in a if a.index(x) not in b ]
或者,使用过滤器:
filter(lambda x : a.index(x) not in b , a)
试试这个它会工作
[j for i,j in enumerate(a) if i not in b ]
在这之后:
y = [a[x] for x in b]
只需添加:
for x in y:
a.remove(x)
然后你最终得到一个精简列表