Обновление итерации во время цикла — Python

#python

#python

Вопрос:

Я пытаюсь обновить итерацию, чтобы не создавать дубликаты, которые я создал с более ранней версией следующего.

Первый метод — это обновленный вспомогательный метод для функции-генератора, которая пытается получить условия следующей последовательности:

2, 12, 1112, 3112, 132112

Я пытаюсь «обновить» итератор, если он уже прошел через значение индекса, но я не могу найти хороший способ сделать это. Какие методы или встроенные функции я мог бы использовать для достижения этой цели?

     def count_seq_helper(target_string):
    """
    helper function
    :param target_string:
    :return:
    """

    result_list = []

    position = 0
    while position < len(target_string) - 1:
        pos = 0
        for i in range(pos, len(target_string)):
            count = 1
            if target_string[pos] == target_string[pos   1]:
                count  = 1

            result_list.append(str(count))
            result_list.append(target_string[i])
    return ''.join(result_list)
  

Это был мой исходный код:

 def count_seq_helper(target_string):
    """
    helper function
    :param target_string:
    :return:
    """

    result_list = []

    for i in range(len(target_string)):
        count = 1
        for j in range(i 1, len(target_string)):
            if target_string[i] == target_string[j]:
                count  = 1

        result_list.append(str(count))
        result_list.append(target_string[i])
    return ''.join(result_list)
  

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

1. Я не уверен, что вы пытаетесь сделать. Но ваш цикл есть while position < len(target_string) - 1 , но тогда внутри цикла вы никогда не изменяете ни position или target_string . Это pos должно быть position ?

2. Каков желаемый результат и с чем у вас возникли проблемы? Невозможно понять на основе вашего вопроса. Это требует дальнейшего уточнения.

3. @FrankYellin Спасибо за ваш ответ. Я смог исправить это, используя цикл for с вложенными условными обозначениями if-elif-else, поскольку мне нужно было учесть три условия. Я удалил цикл while оттуда, спасибо за ваш вклад.

4. @FrankYellin amp; Joe Ferndz Благодарим вас за ваши ответы. Я смог исправить это, используя цикл for с вложенными условными обозначениями if-elif-else, поскольку мне нужно было учитывать три условия. Я удалил цикл while оттуда, спасибо за вашу помощь.

Ответ №1:

Я смог решить эту проблему, используя следующий псевдокод:

 for every item in the string:
   if it's the first item:
        while the next item is not equivalent to the last item:
              count the items if they're equivalent and add them to a result list
    
   elif it's not the first item or the last item and it hasn't been previously counted:
        count the items that are equivalent and continues and add them to the result list
    
   else:
        this must be the last item and simply add '21' to the result list

return the result list to the caller function