如何检查list1是否包含list2的一些元素?

时间:2014-03-09 11:13:28

标签: python list

我需要从list1中删除一些字符串,所以我将它们放入list2中,并且无法找到如何使它工作。

list1 = ['abc', 'def', '123']
list2 = ['def', 'xyz', 'abc']  # stuff to delete from list1

我想从list1中删除'abc'和'def',因此它只包含我需要的东西

4 个答案:

答案 0 :(得分:6)

您可以使用列表理解作为过滤器来完成此操作,例如

set2, list1 = set(['def', 'xyz', 'abc']), ['abc', 'def', '123']
print [item for item in list1 if item not in set2]
# ['123']

我们将list2的元素转换为集合,因为它们提供更快的查找。

逻辑类似于这样的写作

result = []
for item in list1:
    if item not in set2:
        result.append(item)

答案 1 :(得分:1)

如果您在list1中没有任何重复(或者如果您想删除重复项),可以使用:

list1 = set(['abc', 'def', '123'])
list2 = set(['def', 'xyz', 'abc'])
print(list(list1 - list2))

答案 2 :(得分:0)

list1 = set(['abc', 'def', '123'])
list2 = set(['def', 'xyz', 'abc'])

# here result will contain only the intersected element
# so its very less.

result = set(filter(set(list1).__contains__, list2))
newlist = list()

for elm in list1:
    if elm not in result:
        newlist.append(elm)
print newlist

输出:

['123']

答案 3 :(得分:0)

使用builtin set methods的更短答案:

list1 = ['abc', 'def', '123']
list2 = ['def', 'xyz', 'abc']
set1 = set(list1)
set2 = set(list2)
print(set1.difference(set2)))

引用上面的文档:

  

“返回一个新集合,其中集合中的元素不在其他元素中。”