📜  Python|两个列表的差异,包括重复项

📅  最后修改于: 2022-05-13 01:55:42.796000             🧑  作者: Mango

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]