使用列表推导将项目保留在第二个列表中

时间:2016-08-31 13:44:12

标签: python list list-comprehension not-operator

我正在尝试使用列表推导来从列表中删除一些项目,只需保留那些未指定的项目。

例如,如果我有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

4 个答案:

答案 0 :(得分:6)

您可以使用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是列表的长度。

答案 1 :(得分:1)

猜猜你正在寻找像:

这样的东西
[ x  for x  in a if a.index(x) not in b  ] 

或者,使用过滤器:

filter(lambda x : a.index(x) not in b , a)

答案 2 :(得分:0)

试试这个会起作用

{{1}}

答案 3 :(得分:-1)

之后:

y = [a[x] for x in b]

只需添加:

for x in y:
    a.remove(x)

然后你最终得到一个

中的精简列表