Вопрос:

Самый быстрый способ сравнить массив массивов?

python arrays comparison arrayofarrays

60 просмотра

2 ответа

2405 Репутация автора

У меня есть массивы массивов, как показано ниже:

[[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 и выяснить, совпадают ли они.

Какой самый быстрый способ сделать это? Сами массивы небольшие, но мне приходится делать эту проверку очень часто.

Автор: sten Источник Размещён: 08.11.2017 11:20

Ответы (2)


0 плюса

5 Репутация автора

Одним из способов является выравнивание двух массивов и сравнение. Нравится:

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

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

def flat (ls): вернуть [val для подсписка в ls для val в подсписке]

set (flat (list1)) == set (flat (list2))

Автор: shreyy Размещён: 09.11.2017 12:07

1 плюс

2986 Репутация автора

Решение

Вы можете преобразовать подсписки в кортежи (неизменяемые), используя 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
Автор: Transhuman Размещён: 09.11.2017 12:20
Вопросы из категории :
32x32