Python для цикла, повторяющего уже повторенный элемент

#python #for-loop

#python #для цикла

Вопрос:

Итак, я пытался решить эту проблему с leetcode:

Ввод: command = «G()(al)»

Результат: «Цель»

Объяснение: Анализатор цели интерпретирует команду следующим образом:

G -> G

() -> o

(al) -> al

Конечным объединенным результатом является «Цель».

Это мой код:

 def interpret(command: str) -> str:
        
        res = ''
        
        for i in command:
            
            if i == 'G':
                res  = i
            
            if i == '(':
                ind = command.index(i)
                if command[ind   1] == ')':
                    res  = 'o'
                if command[ind   1] == 'a':
                    res  = 'al'
        
        return res
 

Проблема в том, что вместо возврата ‘Goal’ функция возвращает ‘Goo’. Поэтому я изменил функцию на следующую, чтобы посмотреть, что происходит:

 for i in command:
            if i == '(':
                print(command.index(i))
 

И приведенный выше код выводит это

 1
1
 

что означает, что цикл повторяет элемент дважды?

Что я сделал не так и как я могу исправить функцию, чтобы вернуть правильный вывод?

Ответ №1:

command.index() выдает первое вхождение ‘(‘ .

Перепишите свою функцию следующим образом:

 def interpret(command: str) -> str:

    res = ""

    for c, i in enumerate(command):

        if i == "G":
            res  = i

        if i == "(":
            ind = c
            if command[ind   1] == ")":
                res  = "o"
            if command[ind   1] == "a":
                res  = "al"

    return res
 

Комментарии:

1. Примечание: действительно странно называть индекс c и значение i ; i почти всегда это имя индекса. Я понимаю, что OP используется i для значения, но тьфу, не поощряйте это.

2. О, теперь это имеет смысл! Спасибо, приятель