比较数组的数组的最快方法?
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
我有如下所示的数组数组:
[[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