如何在 Python 中执行列表减法

Rayven Esplanada 2023年1月30日 2020年11月24日
  1. 在 Python 中,将列表转换为集合来执行列表减法
  2. 在 Python 中使用列表推导式获取列表差值
如何在 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 存在于两个集合中。这种行为符合预期。

Rayven Esplanada avatar Rayven Esplanada avatar

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

相关文章 - Python List