заменить повторяющиеся значения в списке на «х»? - PullRequest
0 голосов
/ 08 февраля 2019

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

mylist = ['a', 'b', 'b', 'a', 'c', 'a']

в

mylist = ['a', 'b', 'x', 'x', 'c', 'x']

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

def replace(foo):
    newlist= []
    for i in foo:
        if foo[i] == foo[i+1]:
            foo[i].replace('x')
    return foo

Однако я знаю, что с этим есть две проблемы.во-первых, я получаю сообщение об ошибке

list indices must be integers or slices, not str

, поэтому я считаю, что вместо этого я должен работать в диапазоне этого списка, но я не уверен, как его реализовать.Другое дело, что это поможет мне только в том случае, если дублирующее письмо придет сразу после моей итерации (i).

К сожалению, это насколько мое понимание проблемы достигает.Если кто-нибудь может дать мне некоторые разъяснения по поводу этой процедуры, я был бы очень признателен.

Ответы [ 4 ]

0 голосов
/ 08 февраля 2019

В других решениях используется индексирование, которое не обязательно требуется.

Действительно, вы можете проверить if значение in новый список, else вы можете append x,Если вы хотите использовать функцию:

old = ['a', 'b', 'b', 'a', 'c']

def replace_dupes_with_x(l):
    tmp = list()
    for char in l:
        if char in tmp:
            tmp.append('x')
        else:
            tmp.append(char)

    return tmp

new = replace_dupes_with_x(old)
0 голосов
/ 08 февраля 2019

Вы можете использовать следующее решение:

from collections import defaultdict

mylist = ['a', 'b', 'b', 'a', 'c', 'a']
ret, appear = [], defaultdict(int)
for c in mylist:
     appear[c] += 1
     ret.append(c if appear[c] == 1 else 'x')

, которое даст вам:

['a', 'b', 'x', 'x','c', 'x']

0 голосов
/ 08 февраля 2019

Простое решение.

my_list = ['a', 'b', 'b', 'a', 'c', 'a']
new_list = []

for i in range(len(my_list)):
    if my_list[i] in new_list:
        new_list.append('x')
    else:
        new_list.append(my_list[i])
print(my_list)
print(new_list)

# output
#['a', 'b', 'b', 'a', 'c', 'a']
#['a', 'b', 'x', 'x', 'c', 'x']
0 голосов
/ 08 февраля 2019

Просмотрите список и следите за тем, что вы видели в наборе.Замените вещи, которые вы видели ранее в списке, на 'x':

mylist = ['a', 'b', 'b', 'a', 'c', 'a']

seen = set()
for i, e in enumerate(mylist):
    if e in seen:
        mylist[i] = 'x'
    else:
        seen.add(e)

print(mylist)
# ['a', 'b', 'x', 'x', 'c', 'x']
...