比较数组的数组的最快方法?

Fastest way to compare Array-of-array?

我有如下所示的数组数组:

[[0, 3], [0, 4, 1, 5], [0, 2]]
[[0, 4, 1, 5], [0, 3], [0, 2]]
[[0, 2], [0, 4, 1, 5], [0, 3]]

[[0, 4, 1, 5, 3], [0, 2]]
[[0, 4, 1, 5, 3, 2]]

如果您查看前 3 个示例,它们是相同的数组,只是顺序不同。

任何时候我都必须比较两个这样的AoA并弄清楚它们是否相同。

最快的方法是什么? 数组本身很小,但我必须经常做这个检查。

一种方法是将两个数组展平并进行比较。像这样:

list1 = [[0, 3], [0, 4, 1, 5], [0, 2]]

list2 = [[0, 4, 1, 5], [0, 3], [0, 2]]

def 平(ls): return [ls 中子列表的 val 子列表中的 val]

设置(平坦(列表1))==设置(平坦(列表2))

您可以使用 map(tuple,list)) + 排序主列表(根据整数元素顺序对元组排序)将子列表转换为元组(不可变)。

l1 = [[0, 3], [0, 4, 1, 5], [0, 2]]
l2 = [[0, 4, 1, 5], [0, 3], [0, 2]]
l3 = [[0, 2], [0, 4, 1, 5], [0, 3]]
print (sorted(map(tuple,l1)) == sorted(map(tuple,l2)))
#True
print(sorted(map(tuple,l2)) == sorted(map(tuple,l3)))
#True
print (sorted(map(tuple,l3)) == sorted(map(tuple,l1)))
#True

l4 = [[0, 4, 1, 5, 3], [0, 2]]
l5 = [[0, 4, 1, 5, 3, 2]]
sorted(map(tuple,l4)) == sorted(map(tuple,l5))
#False