断言两个列表相等而没有顺序重要性的最佳方法是什么?例如这两个列表是相等的:

a = [[1,2], [3,4]]
b = [[4,3], [2,1]]

assert lists_equal_without_order(a, b)  # True

理想情况下,如何使用Python现有的某些断言来实现lists_equal_without_order

最佳答案

如果ab中的项目中没有重复项,则
您可以使用集合理解来收集每个项目的卡住集合。
例如,

In [106]: {(frozenset(item)) for item in a}
Out[106]: {frozenset({1, 2}), frozenset({3, 4})}

然后测试这些集合是否相等:
In [107]: {(frozenset(item)) for item in a} == {(frozenset(item)) for item in b}
Out[107]: True

之所以可行,是因为集合没有顺序,并且frozensets是可哈希的(因此可以是集合的元素)。如果没有重复项,则Frozenset相等会使[1,2][2,1]等效:
In [109]: frozenset([1,2]) == frozenset([2,1])
Out[109]: True

但是请注意,如果存在重复项,则Frozensets将使[1,1,2][2,2,1]等效:
In [108]: frozenset([1,1,2]) == frozenset([1,2,2])
Out[108]: True

关于python - 断言列表相等性的列表,但在Python中没有顺序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31501909/

10-10 00:06