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

Day*_*ana 3 python

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

list_a = ['one', 'two', 'three']
list_b = ['three', 'one', 'two']
Run Code Online (Sandbox Code Playgroud)

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

>>> list_a == list_b
False
Run Code Online (Sandbox Code Playgroud)

两个列表都有很多元素,比较它们的最佳方法是什么?

tim*_*geb 9

您需要比较两个列表是否相同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
>>> set(list_a) == set(list_b)
True # False positive
Run Code Online (Sandbox Code Playgroud)

另一种解决方案是对两个列表进行排序,然后进行比较.Counter对于大型列表,该方法应该更有效,因为它具有线性时间复杂度(即O(n)),而排序仅是伪线性的(即O(n*log(n)).


Cor*_*mer 7

一种方法是比较set每个列表中的一个

>>> list_a = ['one', 'two', 'three']
>>> list_b = ['three', 'one', 'two']
>>> set(list_a) == set(list_b)
True
Run Code Online (Sandbox Code Playgroud)

否则,如果可能存在重复项,并且您希望确保它们具有相同数量的每个元素,那么您可以这样做

>>> sorted(list_a) == sorted(list_b)
True
Run Code Online (Sandbox Code Playgroud)