Группировка одного и того же значения списка в одно значение списка - PullRequest
1 голос
/ 06 июля 2019

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

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)]

Ответы [ 5 ]

1 голос
/ 06 июля 2019

Просто адаптируйте решение 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']
1 голос
/ 06 июля 2019

Метод-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

Надеюсь, это поможет вам.

1 голос
/ 06 июля 2019

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

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

Например:

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 со списком, содержащимуникальные значения

1 голос
/ 06 июля 2019

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

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 голосов
/ 06 июля 2019

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

вы можете сначала отлить свой оригинальный 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() преобразует ваш набор в список, чтобы в будущем вы могли рассматривать его как список.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...