如何在 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
存在于两个集合中。这种行为符合预期。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布,任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站。本站所有源码与软件均为原作者提供,仅供学习和研究使用。如您对本站的相关版权有任何异议,或者认为侵犯了您的合法权益,请及时通知我们处理。