从另一个列表中删除一组不同值的所有实例?

时间:2019-06-27 20:09:16

标签: python-3.x

ggplot(dat, aes(g, val, fill = dim, color = dim)) + 
  geom_col(size = 2) + 
  facet_wrap(~var) +
  scale_color_manual(values = c('firebrick', 'navy')) +
  scale_fill_manual(values = c(NA, 'navy'))

是否可以将list2中的值从list1中完全删除并输出:

list1 = [1, 'a', 'c', 3, 5, 3, 3, 'a', 'b']
list2 = ['a', 3, 'b']

3 个答案:

答案 0 :(得分:1)

您可以尝试将它们从列表投射到集合!

>>> list1 = [1, 'a', 'c', 3, 5, 3, 3, 'a', 'b']
>>> list2 = ['a', 3, 'b']

>>> set(list1) - set(list2)
# returns => {1, 5, 'c'}

>>> list(set(list1) - set(list2))
# returns => [1, 5, 'c']

Sets是一个本地python对象,类似于列表,但是它们是无序的,并且每个项目都是唯一的。使用集合,您可以执行集合操作,例如“子集”,“联合”和“差异”(这就是它)。


注意:仅当您不关心重复项或项目订单时,此技术才有效。如果您必须保留其中任何一项或全部,那么列表理解或其他过滤技术会更好。

答案 1 :(得分:1)

使用给定的列表,

>>> list1 = [1, 'a', 'c', 3, 5, 3, 3, 'a', 'b']
>>> list2 = ['a', 3, 'b']

使用列表理解

>>> list3 = [item for item in list1 if item not in list2]
>>> list3
[1, 'c', 5]

当我们更改list2时,输出将如预期的那样:

>>> list2 = ['a', 5, 'b']
>>> list3 = [item for item in list1 if item not in list2]
>>> list3
[1, 'c', 3, 3, 3]

答案 2 :(得分:0)

在查看了其他答案之后,您可能想要尝试结合以下两种方法的混合方法:

>>> list1 = [1, 'a', 'c', 3, 5, 3, 3, 'a', 'b']
>>> list2 = ['a', 3, 'b']
>>> remove = frozenset(list2)
>>> list3 = [x for x in list1 if x not in remove]
>>> list3
[1, 'c', 5]
>>>