Python 计算两个列表之间的对称差

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中两个列表之间的对称差。每种方法都具有独特性和处理任务的不同方式。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程