如何比较两个顺序不同的列表?

11 浏览
0 Comments

如何比较两个顺序不同的列表?

我需要比较两个列表,而不考虑它们的顺序:

list_a = ['one', 'two', 'three']
list_b = ['three', 'one', 'two']

当我尝试比较它们时,它返回False

>>> list_a == list_b
False

这两个列表都有许多元素,有什么最优的方法可以比较它们?

0
0 Comments

如何比较两个顺序不同的列表?

有一种方法是比较每个列表的一个set集合。代码如下:

>>> list_a = ['one', 'two', 'three']
>>> list_b = ['three', 'one', 'two']
>>> set(list_a) == set(list_b)
True

如果列表中有重复项,并且你想确保它们具有相同数量的每个元素,那么可以使用排序的方法进行比较。代码如下:

>>> sorted(list_a) == sorted(list_b)
True

感谢您的回答。我尝试了这个方法,它完美地解决了我的问题!

然而,这种方法可能会导致错误的判断。例如:`list_a = ["a", "a", "b"]` 和 `list_b = ["a", "b", "b"]`,通过比较set集合时会返回True,但实际上它们的元素并不完全相同。

0
0 Comments

两个列表的元素顺序不同,但需要比较它们是否相等。可以使用Counter函数来实现这个目标。首先,将两个列表转换为Counter对象,然后比较它们是否相等。如果Counter对象相等,则说明两个列表具有相同的元素组成。如果Counter对象不相等,则说明两个列表的元素组成不同。

另一种解决方法是对两个列表进行排序,然后再进行比较。这种方法的时间复杂度为O(n*log(n)),相对于大型列表来说,Counter方法的时间复杂度为O(n),更为高效。

下面是使用Counter函数比较两个列表的示例:

from collections import Counter
list_a = ['one', 'two', 'three']
list_b = ['three', 'one', 'two']
Counter(list_a) == Counter(list_b)  # True
list_b = ['three', 'one', 'two', 'two']
Counter(list_a) == Counter(list_b)  # False

以上示例中,第一个比较返回True,因为两个列表具有相同的元素组成。第二个比较返回False,因为两个列表的元素组成不同。

使用Counter函数或排序方法都可以比较两个列表的元素组成是否相同。对于大型列表来说,Counter方法更为高效。

0
0 Comments

如何比较两个顺序不同的列表?

在比较两个顺序不同的列表时,可以使用collections模块中的Counter方法。根据答案所示,可以使用以下代码:

from collections import Counter
if Counter(list_a) == Counter(list_b): # True or False

如果列表中有任何不可哈希的元素(除了字符串和数字),例如对象等,可以将它们的id移除并创建另一个列表,然后比较它们的Counter。

if Counter(map(id, list_a)) == Counter(map(id, list_b)):
    print "same unhashable things in list_a and list_b"

非常感谢您的回答。这个方法也很有效。

0