0

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

[[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 并确定它们是否相同。

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

4

2 回答 2

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
于 2017-11-09T00:20:15.280 回答
0

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

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

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

def flat(ls): return [val for sublist in ls for val in sublist]

设置(扁平(list1))==设置(扁平(list2))

于 2017-11-09T00:07:18.573 回答