如何在Python中比较两个列表

简介

在编程或学习Python时,您可能需要确定两个或多个列表是否相等。当您比较列表的相等性时,您正在检查列表是否具有相同的长度以及列表中的每个项是否相等。长度不同的列表永远不相等。

本文介绍如何使用以下Python功能来比较列表:

  • sort() method or the sorted() function with the == operator
  • set() function with the == operator
  • reduce() and map() functions with the == operator
  • collection.Counter() class with the == operator
  • list comprehension

使用sort()方法或sorted()函数来比较列表。

你可以使用sort()方法或sorted()函数对列表进行排序,以便比较它们的相等性。sort()方法会原位排序列表,而sorted()函数会返回一个新的列表。排序后,相等的列表在相同的索引位置上会有相同的项目。==运算符会逐个项目进行比较(逐元素比较)。

在比较之前,原始列表项的顺序并不重要,因为列表会在排序后进行比较。

Note

注意:只能对具有相同数据类型的列表进行排序。

排序()方法示例

下面这个例子演示了如何使用sort()方法对列表进行排序和比较判等:

l1 = [10, 20, 30, 40, 50] 
l2 = [20, 30, 50, 40, 70] 
l3 = [50, 10, 30, 20, 40] 

l1.sort() 
l2.sort() 
l3.sort() 

if l1 == l2: 
    print ("The lists l1 and l2 are the same") 
else: 
    print ("The lists l1 and l2 are not the same") 

if l1 == l3: 
    print ("The lists l1 and l3 are the same") 
else: 
    print ("The lists l1 and l3 are not the same") 

输出为:

Output

The lists l1 and l3 are the same The lists l1 and l2 are not the same

前面的示例代码对每个列表进行排序,比较l1和l3的结果并打印,然后比较l1和l2的结果并打印。

sorted()函数的例子

下面的示例演示了如何使用sorted()函数对列表进行排序和比较是否相等。

l1 = [10, 20, 30, 40, 50]
l2 = [20, 30, 50, 40, 70]
l3 = [50, 10, 30, 20, 40]

l1_sorted = sorted(l1)
l2_sorted = sorted(l2)
l3_sorted = sorted(l3)

if l1_sorted == l2_sorted:
    print ("The lists l1 and l2 are the same")
else:
    print ("The lists l1 and l2 are not the same")

if l1_sorted == l3_sorted:
    print ("The lists l1 and l3 are the same")
else:
    print ("The lists l1 and l3 are not the same")

输出是:

Output

The lists l1 and l3 are the same The lists l1 and l2 are not the same

之前的代码示例返回每个列表的排序版本,比较l1和l3并打印结果,然后比较l1和l2并打印结果。

使用reduce()和map()函数来比较列表。

你可以使用Python的map()函数与functools.reduce()函数来比较两个列表的数据项。当你将它们结合使用时,map()函数会将给定的函数应用于每个元素,而reduce()函数则确保以连续的方式应用函数。

map()函数接受一个函数和一个可迭代对象作为参数。map()函数将给定的函数应用于可迭代对象的每个项,然后将返回一个map对象(迭代器)作为结果。

functools.reduce() 这个函数还可以接受一个函数和一个可迭代对象作为参数。functools.reduce() 函数递归地将给定的函数应用于可迭代对象的每个元素。最初,functools.reduce() 函数将该函数应用于第一个和第二个元素,并返回结果,然后将该函数应用于结果和第三个元素,并继续直到列表没有剩余项。

当你将它们结合使用时,map() 函数将给定的函数应用于每个元素,而 reduce() 函数则确保以连续的方式应用该函数。

当使用reduce()和map()函数时,列表项的顺序是重要的。具有相同项但顺序不同的列表在进行相等性比较时不会返回true。如果需要,可以先对列表进行排序。

以下示例演示了如何使用 reduce() 和 map() 函数来比较列表的相等性:

import functools

l1 = [10, 20, 30, 40, 50]
l2 = [20, 30, 50, 40, 70]
l3 = [10, 20, 30, 40, 50]

if functools.reduce(lambda x, y : x and y, map(lambda p, q: p == q,l1,l2), True):
    print ("The lists l1 and l2 are the same")
else:
    print ("The lists l1 and l2 are not the same")

if functools.reduce(lambda x, y : x and y, map(lambda p, q: p == q,l1,l3), True):
    print ("The lists l1 and l3 are the same")
else:
    print ("The lists l1 and l3 are not the same")

输出结果是:

Output

The lists l1 and l2 are not the same The lists l1 and l3 are the same

上述示例代码将l1与l2进行比较,然后将l1与l3进行比较。

使用set()函数来比较列表

你可以使用 set() 函数来使用给定的列表创建集合对象,然后使用 == 运算符比较这些集合是否相等。

原始列表项的顺序并不重要,因为当每个集合包含相同项的任意顺序时,”==” 运算符返回 true。

Note

注意:在一个集合中,重复的列表项只出现一次。

下面的示例演示如何将列表转为集合并比较这些集合是否相等。

l1 = [10, 20, 30, 40, 50]
l2 = [50, 10, 30, 20, 40]

a = set(l1)
b = set(l2)

if a == b:
    print("Lists l1 and l2 are equal")
else:
    print("Lists l1 and l2 are not equal")

输出是:

Output

Lists l1 and l2 are equal

前面的例子代码根据列表l1和l2创建了集合a和b,然后比较这两个集合并打印结果。

使用collections.Counter()类来比较列表

collections.Counter()类可用于比较列表。counter()函数计算列表中各项的频率,并将数据以值:频率的字典对象格式存储。如果两个列表具有相同的字典输出,可推断这两个列表是相同的。

当使用Counter类来比较列表时,原始列表项的顺序并不重要。

以下示例演示如何从给定的列表创建计数器对象,并比较它们的相等性。

import collections

l1 = [10, 20, 30, 40, 50]
l2 = [20, 30, 50, 40, 70]
l3 = [50, 20, 30, 40, 10]

if collections.Counter(l1) == collections.Counter(l2):
    print ("The lists l1 and l2 are the same")
else:
    print ("The lists l1 and l2 are not the same")

if collections.Counter(l1) == collections.Counter(l3):
    print ("The lists l1 and l3 are the same")
else:
    print ("The lists l1 and l3 are not the same")

输出是:

Output

The lists l1 and l2 are not the same The lists l1 and l3 are the same

前面的示例代码为列表l1和l2创建了计数器对象,进行对比并打印结果。该代码会重复为列表l1和l3执行相同的操作。

使用列表推导来比较列表。

你可以使用列表推导式来比较两个列表。有关列表推导式的更多信息,请参阅Python 3中的理解列表推导式。

当使用列表推导来比较列表时,原始列表项的顺序并不重要。

下面的例子展示了如何使用列表推导来比较列表:

l1 = [10, 20, 30, 40, 50]
l2 = [50, 75, 30, 20, 40]
l3 = [50, 20, 30, 40, 10]

res = [x for x in l1 + l2 if x not in l1 or x not in l2]

print(res)
if not res:
    print("Lists l1 and l2 are equal")
else:
    print("Lists l1 and l2 are not equal")

res2 = [x for x in l1 + l3 if x not in l1 or x not in l3]

print(res2)
if not res2:
    print("Lists l1 and l3 are equal")
else:
    print("Lists l1 and l3 are not equal")

前面的示例代码将指针元素x设置为列表l1和l2,然后检查指针元素指向的项目是否存在于列表中。如果结果res是一个空列表,那么可以推断这两个列表是相等的,因为没有只出现在其中一个列表中的项目。

输出结果为:

Output

[10, 75] Lists l1 and l2 are not equal

结论是

这篇文章描述了几种在Python中比较列表是否相等的方法。请继续学习更多关于Python的教程。

发表回复 0

Your email address will not be published. Required fields are marked *


广告
将在 10 秒后关闭
bannerAds