разделить список подсписков на основе их первых элементов - PullRequest
0 голосов
/ 11 января 2020

если у меня есть список, который выглядит примерно так (список а)

my_list=[[3, 1], [3, 0], [3, 0], [3, 1], [4, 1], [4, 0]]

я хочу разделить этот список на что-то вроде этого (список б)

my_list = [ [[3, 1], [3, 0], [3, 0], [3, 1]] , [[4, 1], [4, 0]] ]

, как вы Как видно, список b отсортирован и сгруппирован по значениям первого элемента подсписков. Порядок пар не меняется.

спасибо!

Ответы [ 3 ]

2 голосов
/ 11 января 2020

Вы можете использовать itertools.groupby для группировки по первому элементу:

my_list = itertools.groupby(my_list, key = lambda e: e[0])

Это даст вам генератор itertools.groupby из пар (ключ, список). Игнорируйте ключи и преобразуйте их в список, выполнив

[list(e[1]) for e in my_list]

. Это даст:

[[[3, 1], [3, 0], [3, 0], [3, 1]], [[4, 1], [4, 0]]]
1 голос
/ 11 января 2020

itertools.groupby(...) должен выполнить трюк:

import itertools

my_list=[[3, 1], [3, 0], [3, 0], [3, 1], [4, 1], [4, 0]]
#although your input seems to be sorted by 1st element I'll put it in here, in case if it wouldn't be
my_list=sorted(my_list, key=lambda x: x[0])

my_list=list(list(el) for k, el in itertools.groupby(my_list, key=lambda x: x[0]))

Вывод:

[[[3, 1], [3, 0], [3, 0], [3, 1]], [[4, 1], [4, 0]]]

Ссылка: https://docs.python.org/2/library/itertools.html#itertools .groupby

0 голосов
/ 11 января 2020
my_list=[[3, 1], [3, 0], [3, 0], [3, 1], [4, 1], [4, 0]]
new_list =[]

j =0
for i in list(set([ value[0] for value in my_list])) :
    temp_list = []
    while (j < len(my_list)) and (my_list[j][0] == i):
        temp_list.append(my_list[j])
        j=j+1
    new_list.append(temp_list)


print (new_list)

[[[3, 1], [3, 0], [3, 0], [3, 1]], [[4, 1], [4, 0]]]

...