Замена всех элементов списка, которые являются последовательными и дублируются в Python - PullRequest
0 голосов
/ 04 июня 2018

Скажем, у меня есть список с некоторыми числами, которые являются дубликатами.

list = [1,1,1,1,2,3,4,4,1,2,5,6]

Я хочу идентифицировать все элементы в списке, которые повторяются и являются последовательными, включая первый элемент, то есть замену всех элементов всписок значений в словаре:

mydict = {1: 'a', 4: 'd'}    
list = ['a','a','a','a',2,3,'d','d',1,2,5,6]

Поскольку я также хочу заменить первый экземпляр повторения, я совершенно не понимаю, как действовать!

1 Ответ

0 голосов
/ 04 июня 2018

itertools.groupby ваш друг:

from itertools import groupby

mydict = {1: 'a', 4: 'd'}
A = [1,1,1,1,2,3,4,4,1,2,5,6]

res = []
for k, g in groupby(A):
  size = len(list(g))
  if size > 1:
    res.extend([mydict[k]] * size)  # see note 1
  else:
    res.append(k)
print(res)  # -> ['a', 'a', 'a', 'a', 2, 3, 'd', 'd', 1, 2, 5, 6]

Примечания:

  1. Если вы хотите поймать возможных KeyError с ииметь значение по умолчанию, которое вы хотите отступить на , использовать mydict.get(k, <default>) вместо mydict[k]
...