Python|两个列表的差异,包括重复项
查找两个列表差异的方法之前已经讨论过,但有时,我们只需要删除特定出现的元素,就像它们在其他列表中出现的一样多。让我们讨论可以执行此操作的某些方式。
方法 #1:使用collections.Counter()
Counter 方法可用于获取列表中元素的确切出现次数,因此可以选择性地减去而不是使用集合并完全忽略元素的计数。然后可以执行减法以获得实际发生的情况。
# Python3 code to demonstrate
# Difference of list including duplicates
# Using collections.Counter()
from collections import Counter
# initializing lists
test_list1 = [1, 3, 4, 5, 1, 3, 3]
test_list2 = [1, 3, 5]
# printing original lists
print("The original list 1 : " + str(test_list1))
print("The original list 2 : " + str(test_list2))
# Using collections.Counter()
# Difference of list including duplicates
res = list((Counter(test_list1) - Counter(test_list2)).elements())
# print result
print("The list after performing the subtraction : " + str(res))
输出 :
The original list 1 : [1, 3, 4, 5, 1, 3, 3]
The original list 2 : [1, 3, 5]
The list after performing the subtraction : [1, 3, 3, 4]
方法 #2:使用map() + lambda + remove()
上述功能的组合可用于执行此特定任务。 map函数可用于将函数链接到所有元素并删除它的第一次出现。因此不会重复删除。仅适用于 Python2。
# Python code to demonstrate
# Difference of list including duplicates
# Using map() + lambda + remove()
# initializing lists
test_list1 = [1, 3, 4, 5, 1, 3, 3]
test_list2 = [1, 3, 5]
# printing original lists
print("The original list 1 : " + str(test_list1))
print("The original list 2 : " + str(test_list2))
# Using map() + lambda + remove()
# Difference of list including duplicates
res = map(lambda x: test_list1.remove(x)
if x in test_list1 else None, test_list2)
# print result
print("The list after performing the subtraction : " + str(test_list1))
输出 :
The original list 1 : [1, 3, 4, 5, 1, 3, 3]
The original list 2 : [1, 3, 5]
The list after performing the subtraction : [1, 3, 3, 4]