使用列表理解使项目不在第二个列表中
Using list comprehension to keep items not in second list
我正在尝试使用列表推导式从列表中删除一些项目,只保留未指定的项目。
例如,如果我有 2 个列表 a = [1,3,5,7,10]
和 b = [2,4]
我想保留 a
中不在与 [=13= 中的数字相对应的索引处的所有项目].
现在,我尝试使用 y = [a[x] for x not in b]
,但这会产生语法错误。
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
作为 集 而不是列表。 Lookups into sets are O(1)
on average 在列表中 - O(n)
其中 n
是列表的长度。
在此之后:
y = [a[x] for x in b]
只需添加:
for x in y:
a.remove(x)
然后你最终得到一个
中的精简列表
我猜您正在寻找类似的东西:
[ 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 ]
我正在尝试使用列表推导式从列表中删除一些项目,只保留未指定的项目。
例如,如果我有 2 个列表 a = [1,3,5,7,10]
和 b = [2,4]
我想保留 a
中不在与 [=13= 中的数字相对应的索引处的所有项目].
现在,我尝试使用 y = [a[x] for x not in b]
,但这会产生语法错误。
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
作为 集 而不是列表。 Lookups into sets are O(1)
on average 在列表中 - O(n)
其中 n
是列表的长度。
在此之后:
y = [a[x] for x in b]
只需添加:
for x in y:
a.remove(x)
然后你最终得到一个
中的精简列表我猜您正在寻找类似的东西:
[ 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 ]