比较Array-of-array的最快方法?

时间:2017-11-08 23:20:53

标签: python arrays comparison arrayofarrays

我有类似下面的数组:

[[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并弄清楚它们是否相同。

最快的方法是什么? 阵列本身很小,但我必须经常进行检查。

2 个答案:

答案 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))