#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