我有类似下面的数组:
[[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]]
如果你看前三个例子,它们是相同的数组,只是以不同的方式排序。
在任何时候我都要比较两个这样的AoA并弄清楚它们是否相同。
最快的方法是什么? 阵列本身很小,但我必须经常进行检查。
答案 0 :(得分:1)
您可以使用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
答案 1 :(得分:0)
一种方法是展平两个阵列并进行比较。像这样:
list1 = [[0,3],[0,4,1,5],[0,2]]
list2 = [[0,4,1,5],[0,3],[0,2]]
def flat(ls): 返回[子列表中val的子列表的val为子列表中的val]
set(flat(list1))== set(flat(list2))