Как в питоне распарсить двумерный циклично пополняемый список на отдельные элементы?

Например такой список
list = [[0, 0, 0], [30, 15, 25], [20, 5, 15], [10, -5, 5], [0, -15, -5]]... и он пополняется циклично

Когда у меня будет совпадение по составу блока (но не по последовательности), например
[[30, 15, 25], ...........[15,25,30]....] мне нужно его зафиксировать.
Как это можно сделать?
После их получения нужно иметь возможность сравнить все числа с учетом их порядка по
условию X(n)>=X(ne1)
  • Вопрос задан
  • 180 просмотров
Пригласить эксперта
Ответы на вопрос 3
fox_12
@fox_12 Куратор тега Python
Расставляю биты, управляю заряженными частицами
Не совсем понятно что вам надо, но распарсить двумерный список на отдельные элементы можно так:
arr = [[0, 0, 0], [30, 15, 25], [20, 5, 15], [10, -5, 5], [0, -15, -5]]
sum(arr, [])


[0, 0, 0, 30, 15, 25, 20, 5, 15, 10, -5, 5, 0, -15, -5]
Ответ написан
tsarevfs
@tsarevfs
C++ developer
Для сравнения по составу блока отсортируйте его или используйте set:
>>> set([1, 4, 3]) == set([4, 3, 1])
True

UPD: Как верно подметил Umpiro set выкинет повторяющиеся элементы. Так что если вы считаете [1, 2, 1] и [1, 2] равными по составу, то используйте set. Если нет, то sort.
Ответ написан
ShashkovS
@ShashkovS
list = [[0, 0, 0], [30, 15, 25], [20, 5, 15], [10, -5, 5], [0, -15, -5], [15,25,30]]
stack = []
set_to_index = {}
for i, trio in enumerate(list):
    cur_set = frozenset(trio)
    if cur_set in set_to_index:
        print(f'found! l[{i}] = l[{set_to_index[cur_set]}] = {trio}')
    else:
        stack.append(trio)
        set_to_index[cur_set] = i


frozenset'ы можно использовать как ключи словаря, чтобы быстро проверять, встречалось ли уже такое множество.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы