断言两个列表相等而没有顺序重要性的最佳方法是什么?例如这两个列表是相等的:
a = [[1,2], [3,4]]
b = [[4,3], [2,1]]
assert lists_equal_without_order(a, b) # True
理想情况下,如何使用Python现有的某些断言来实现
lists_equal_without_order
? 最佳答案
如果a
或b
中的项目中没有重复项,则
您可以使用集合理解来收集每个项目的卡住集合。
例如,
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/