Заменить повторяющиеся строковые символы

Мне нужно конвертировать строку word где каждый символ, который появляется только один раз, должен отображаться как '(' в новой строке. Любые повторяющиеся символы в исходной строке следует заменить на ')',

Мой код ниже...

def duplicate_encode(word):
new_word = ''
for char in word:
    if len(char) > 1:
        new_word += ')'
    else:
        new_word += '('
return new_word

Тест, который я не сдаю, выглядит следующим образом:

'((((((' должен равняться '() () ()'

Это предполагает, что если, например, вход "отступить", выход должен читать ()()(),

3 ответа

Просто потому что (уже поздно и) возможно:

def duplicate_encode(word):

    return (lambda w: ''.join(('(', ')')[c in w[:i] + w[i+1:]] for i, c in enumerate(w)))(word.lower())

print(duplicate_encode("rEcede"))

ВЫХОД

> python3 test.py
()()()
>

Ваш код хорош, просто нужно внести некоторые изменения, это будет здорово.

def duplicate_encode(word):
    """
    To replace the duplicate letter with ")" in a string.
    if given letter is unique it replaced with "("
    """
    word_dict = {}   # initialize a dictionary
    new_word = "" 
    for i in set(word):   # this loop is used to count duplicate words
        word_count = word.count(i)
        word_dict[i] = word_count   # add letter and count of the letter to dictionary
    for i in word:
        if word_dict[i] > 1:
            new_word += ")"
        else:
            new_word += "("
    print new_word

duplicate_encode("recede")

Я думаю, что вы получили ответ:)

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

def duplicate_encode(word):
    from collections import Counter

    word = word.lower()              # to disregard case
    counter = Counter(word)
    new_word = ''
    for char in word:
        if counter[char] > 1:        # if the character appears more than once in the word 
                                     # translate it to )
            new_word += ')'
        else:
            new_word += '('
    return new_word

duplicate_encode('recede')
# '()()()'
Другие вопросы по тегам