У меня есть вопрос для группировки нескольких значений списка в одно значение. Например, у меня есть этот список

data_list = [A,A,B,B,B,C,C,C,C]

Тогда я хочу сделать это в этом

data_list = [A, B, C]

Я пытался использовать itertools.groupby, но все еще не могу найти свое решение

from itertools import groupby
data_list = [A,A,B,B,B,C,C,C,C]

data_group = [(key, len(list(group))) for key, group in groupby(data_list)]
print(data_group)

Ожидаемый результат - data_group = [A, B, C]

Фактический результат data_group = [(A, 2), (B, 3), (C, 4)]

0
Bob Adi Setiawan 6 Июл 2019 в 12:08

5 ответов

Лучший ответ

Метод 1 -

Вы также можете использовать numpy для получения уникальных значений: -

import numpy as np
data_list = np.array(['A','A','B','B','B','C','C','C','C'])
np.unique(data_list)

< Сильный > Метод - 2

Вы можете использовать set для получения уникальных значений, но результат set не будет содержать тот же порядок.

new_list = list( set(data_list) )
new_list

Я надеюсь, что это может помочь вам.

0
Rahul charan 6 Июл 2019 в 10:00

Вы пробовали смотреть на сеты?

Сначала вы можете привести исходный data_list в набор, используя set(data_list), а затем снова преобразовать его в список.

data_list = [A,A,B,B,B,C,C,C,C]

print(list(set(data_list)))

#OUTPUT:
['A', 'B', 'C']

Что наборы делают, они включают только уникальные значения. Поэтому, когда мы запускаем функцию set() на вашем data_list var, у нас остаются только уникальные значения. Наборы в python обозначаются «фигурными скобками», как в dicts, { }, но наборы не содержат пары ключ: значение. Функция list() преобразует ваш набор в список, чтобы в будущем вы могли рассматривать его как список.

0
The BrownBatman 6 Июл 2019 в 09:29

Хорошей идеей является использование наборов Python. Согласно документации, часть описания:

"Набор представляет собой неупорядоченную коллекцию без дублирующих элементов. Основные применения включают тестирование членства и удаление дублирующих записей."

Например:

my_list = [1,1,2,2,3,3]
my_set = set(my_list)
print(my_set)
type(my_set)

Будет выводить:

{1,2,3}
set

Имейте в виду, что результирующий тип данных set Итак, если вы хотите, чтобы ваш результат был списком, вы можете преобразовать его обратно в один:

unique_values = list(set(my_list))

И если вы планируете использовать это в своем коде, функция поможет:

def giveUnique(x):
    return list(set(x))

my_list = giveUnique(my_list)

Это изменит my_list со списком, содержащим уникальные значения

0
XuUserAC 6 Июл 2019 в 10:40

Просто адаптируйте itertools.groupby решение, которое вы нашли (нашли?), Чтобы использовать только key:

>>> data_list = [A, A, B, B, B, C, C, C, C] # with A, B, C = "ABC"
>>> [(key, len(list(group))) for key, group in groupby(data_list)]
[('A', 2), ('B', 3), ('C', 4)]
>>> [key for key, group in groupby(data_list)]
['A', 'B', 'C']
0
tobias_k 6 Июл 2019 в 12:02

Попробуйте с этим кодом

mylist = ["a", "b", "a", "c", "c"]
mylist = list(dict.fromkeys(mylist))
print(mylist)

Вы также можете использовать OrderedDict, чтобы распечатать его по порядку

from collections import OrderedDict
mylist =  ['A','A','B','B','B','C','C','C','C']
mylist = list(OrderedDict.fromkeys(mylist))
print(mylist)
0
Thayif kabir 6 Июл 2019 в 09:20