如何在 Python 中执行列表减法
本教程演示了如何在 Python 中执行列表减法,或者换句话说,列表减列表。
正如数学中的集合理论所定义的那样,两个集合的差值指的是一个集合中不存在于另一个集合中的元素。
例如,如果我们声明这两个列表。
list1 = [1, 2, 4]
list2 = [2, 3]
list1 - list2
的差值是 [1, 4]
, 而 list2 - list1
的差值是 [3]
。
在 Python 中,将列表转换为集合来执行列表减法
在 Python 中支持集合理论操作。然而,只有 set
数据类型支持这些操作。因此,要使用 set
操作,必须将列表转换为一个集合。这可以通过将一个列表包裹在函数 set()
中来实现。
listA = [1, 2, 4, 7, 9, 11, 11, 14, 14]
listB = [2, 3, 7, 8, 11, 13, 13, 16]
setA = set(listA)
setB = set(listB)
print("A - B = ", setA - setB)
输出:
A - B = {1, 4, 9, 14}
结果输出两个集合之间的差异,并删除重复的值。
我们可以使用函数 list()
将结果从 set
转换为列表。
listA = [1, 2, 4, 7, 9, 11, 11, 14, 14]
listB = [2, 3, 7, 8, 11, 13, 13, 16]
setA = set(listA)
setB = set(listB)
list_diff = list(setA - setB)
print("A - B: ", list_diff)
输出:
A - B: [1, 4, 9, 14]
在 Python 中使用列表推导式获取列表差值
列表推导可以用来检查一个元素是否只存在于第一个列表中而不存在于第二个列表中。这个解决方案可以在不将列表转换为集合的情况下进行差异操作。
listA = [1, 2, 4, 7, 9, 11, 11, 14, 14]
listB = [2, 3, 7, 8, 11, 13, 13, 16]
listSub = [elem for elem in listA if elem not in listB]
print("A - B =", listSub)
输出:
A - B = [1, 4, 9, 14, 14]
这个解决方案不会扰乱列表的顺序,并且会删除重复的元素。
然而,11
的值在 listA
中重复了两次,并且 11
的两次迭代都从 A - B
的结果中删除,因为 11
存在于两个集合中。这种行为符合预期。
Skilled in Python, Java, Spring Boot, AngularJS, and Agile Methodologies. Strong engineering professional with a passion for development and always seeking opportunities for personal and career growth. A Technical Writer writing about comprehensive how-to articles, environment set-ups, and technical walkthroughs. Specializes in writing Python, Java, Spring, and SQL articles.
LinkedIn