Страницы

Поиск по вопросам

среда, 26 февраля 2020 г.

Группировка одного списка по значениям другого

#python


Имеется два списка:

x = [1,2,1,3]
y = [4,7,3,6]


по результатам группировки первого списка:

from itertools import groupby

for k,g in groupby(x):
    group_x.append(list(g))

group_x = [[1,1],[2],[3]]


хотелось бы получить соответствующий группировке первого списка - второй список в виде:

group_y = [[4,3],[7],[6]]

    


Ответы

Ответ 1



Например так: Составляем новый список с указанием индекса элемента (enumerate) Сортируем список по элементам для возможности группировки (sorted). Для этого в функции сортировки обращаемся ко второму элементу, т.к. первый элемент будет хранить индекс Группируем список по элементам и оставляем в нем только индексы (groupby) Составляем новые списки по индексам Код: from itertools import groupby x = [1,2,1,3] y = [4,7,3,6] spec_list = sorted(enumerate(x), key=lambda x: x[1]) group_index = [[i for i, v in g] for k, g in groupby(spec_list, key=lambda x: x[1])] print(group_index) # [[0, 2], [1], [3]] group_x = [[x[i] for i in group] for group in group_index] print(group_x) # [[1, 1], [2], [3]] group_y = [[y[i] for i in group] for group in group_index] print(group_y) # [[4, 3], [7], [6]]

Ответ 2



x = [1, 2, 1, 3] y = [4, 7, 3, 6] from itertools import groupby only_first = lambda tpl: tpl[0] z = sorted(zip(x, y), key=only_first) group_z = [] for k,g in groupby(z, key=only_first): group_z.append(list(g)) group_y = [[tpl[1] for tpl in arr] for arr in group_z ] print(group_y)

Комментариев нет:

Отправить комментарий