Python 计算两个列表之间的对称差
在Python中,可以使用列表将多个项保存在单个变量中。Python中用于存储数据集合的四种内置数据类型之一是列表;另外三种是元组、集合和字典,每种数据类型都有其独特的用途。
什么是列表
列表使用方括号来构建。列表是Python中最有效的工具,因为它们不一定是同质的。可以在一个列表中找到整数、字符串和对象等多种数据类型。由于列表是可变的,即使在创建后也可以对它们进行更改。
列表中的对称差
两个列表LIST1和LIST2之间的对称差是指在LIST1和LIST2中只有一个列表中存在的元素的集合。
有多种方法可以计算Python中两个列表之间的对称差,我们将使用最有效的方法。
我们将列表转换为集合,然后计算这些集合的对称差。
步骤
- 创建列表
-
将列表转换为集合
-
打印转换后集合的对称差
-
打印列表的对称差
示例
在下面的示例程序中,我们可以使用”in”关键字找到两个列表之间的差异。in关键字有两个功能:
- 确定字符串、列表、元组、范围等中是否存在某个值
-
在for循环中重复遍历列表
L_1 = [11, 12, 13]
L_2 = [12, 13, 42]
L_3 = [3, 42, 5]
# converting lists to set
set_1 = set(L_1)
set_2 = set(L_2)
# now print the symmetric difference when
# when the converted set is passed as a parameter
print(set_1.symmetric_difference(set_2))
# now print the symmetric difference when list is
# passed as a parameter by converting it to a set
print(set_2.symmetric_difference(L_3))
输出
{42, 11}
{13, 3, 12, 5}
示例
在这里,我们创建了两个列表,然后创建了一个空的临时变量。然后我们使用for循环来遍历列表中的数字。如果语句检查数字是否相同,然后将元素附加到先前创建的临时变量中。然后打印具有不同元素的列表。
list_1 = [1, 35, 20, 25, 70, 35, 80]
list_2 = [25, 80, 35]
temp_3 = []
for element in list_1:
if element not in list_2:
temp_3.append(element)
print(temp_3)
输出
[1, 20, 70]
使用列表推导式
在这种方法中,我们显式地将列表转换为集合,然后使用减法运算符从另一个集合中仅移除一个。参考Python中的集合(Sets)获取其他集合引用。这是我们之前使用的类似策略。唯一的区别是我们使用了列表推导式语法来替代嵌套循环。
示例
以下程序比较了两个列表list_1和list_2。它从第二个列表创建一个集合,然后使用该集合来过滤出在两个列表中都出现的任何值。结果是一个新的过滤列表(temp_3),其中包含list_1中不在SET_1(list_2)中出现的元素。
list_1 = [13, 15, 22, 25, 30, 54, 40]
list_2 = [54, 45, 30, 13]
SET_1 = set(list_2)
temp_3 = [x for x in list_1 if x not in SET_1]
print(temp_3)
输出
[15, 22, 25, 40]
没有使用set()的情况下
在这种方法中,使用基本的组合技术从两个列表中复制元素,同时定期检查它们是否存在于另一个列表中。
示例
在下面的程序中 – 我们定义一个名为Difference的函数,它以两个列表作为参数。该函数创建一个新列表list_dif,其中包含原始列表中两个列表中均不存在的项。然后,它打印出这个新列表与两个原始列表之间的差异。在这个例子中,它打印出[1, 12, 25, 22, 30, 20]。
# this method helps to get difference of two lists
# by not using set()
def Difference(list1, list2):
list_dif = [i for i in list_1 + list_2 if i not in list_1 or i not in list_2]
return list_dif
list_1 = [1, 12, 25, 22, 30, 65, 70]
list_2 = [65, 20, 70]
list_3 = Difference(list_1, list_2)
print(list_3)
输出
[1, 12, 25, 22, 30, 20]
使用对称差
对称差(••)方法返回的是属于第一个集合或第二个集合的元素。与两个集合的共享元素不同的是,该方法不返回交集。
示例
list_1 = [23, 18, 45, 25, 40, 23, 40]
list_2 = [23, 40, 35]
set_difference = set(list_1).symmetric_difference(set(list_2))
temp_3 = list(set_difference)
print(temp_3)
输出
[35, 45, 18, 25]
结论
在本文中,我们使用了四种不同的方式来计算Python中两个列表之间的对称差。每种方法都具有独特性和处理任务的不同方式。