如何比较两个顺序不同的列表?
如何比较两个顺序不同的列表?
有一种方法是比较每个列表的一个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,但实际上它们的元素并不完全相同。
两个列表的元素顺序不同,但需要比较它们是否相等。可以使用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方法更为高效。
如何比较两个顺序不同的列表?
在比较两个顺序不同的列表时,可以使用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"
非常感谢您的回答。这个方法也很有效。