найти индексы групп с одинаковым строковым значением - PullRequest
0 голосов
/ 01 мая 2020

У меня есть список строк, которые могут принимать только 4 различных строковых значения, например:

y = ['human', 'human', 'human', 'agent', 'agent', 'player', 'player', 'player', 'opponent', 'opponent', 'opponent', 'human', 'human', 'player', 'player', 'player'] 

Мне нужно получить индексы для групп, что-то вроде:

human_idx = [(0, 2), (11, 12)]
agent_idx = [(3, 4)]
player_idx = [(5, 7), (13, 15)]
opponent_idx = [(8, 10)]

Я нашел решение, если бы это был numpy массив с 0 и 1 с

, но я работаю со списком строк.

1 Ответ

1 голос
/ 01 мая 2020

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

from itertools import groupby
from collections import defaultdict

y = ['human', 'human', 'human', 'agent', 'agent', 'player', 'player', 'player', 'opponent', 'opponent', 'opponent', 'human', 'human', 'player', 'player', 'player']

i = 0
result = defaultdict(list)
for k, g in groupby(y):
    elems = len(list(g))
    result[k].append((i, i+elems-1))
    i += elems

print(result)

# defaultdict(<class 'list'>, 
#             {'human': [(0, 2), (11, 12)],
#              'agent': [(3, 4)],
#              'player': [(5, 7), (13, 15)],
#              'opponent': [(8, 10)]})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...