#python #python-3.x #algorithm #runtime-error #testcase
#питон #python-3.x #алгоритм #ошибка во время выполнения #testcase
Вопрос:
Я пытался решить проблему на Python и столкнулся с некоторыми проблемами с определенным набором тестовых примеров, которые:
5
qwertyuioplkjhgfdsazxcvbnm
aaaaaaaaaaaaaaaaaaaaaaaaaa
aaaabbbbbbbaaaabbbbbbaaaab
zszsdasldnaosdihafalsssadf
jdflsddjddjlasdjsasjsjssjs
Мой код был:
tc = int(input())
for tc_ct in range(tc):
s = input()
edited_s = []
for elm in s:
edited_s.append(elm)
if len(set(edited_s)) == 1 and len(edited_s) > 1:
for output in set(edited_s):
print(output)
else:
n = len(edited_s)
for i in range(n-1):
if i < n-1 and s[i] == s[i 1]:
del edited_s[i]
print("".join(edited_s))
Удивительно, но эта ошибка возникла в нескольких тестовых примерах, а не во всех из них, потому что ошибки индекса обычно возникают каждый раз, а не время от времени. Любая помощь от других Pythoners приветствуется.
Комментарии:
1. Пожалуйста, обновите свой вопрос с полным обратным отслеживанием ошибок.
Ответ №1:
Ваша программа дедуплицирует последовательные символы в слове.
Вы сталкиваетесь с ошибками в else-statement
, потому что вы удаляете элементы в списке, одновременно читая его в том же цикле.
Таким образом, размер списка меняется после прохождения цикла, когда из него удаляется символ.
Вы можете обойти это, создав копию списка, одну для итерации, а другую для удаления элементов.
Тем не менее, я рекомендую составить список результатов и добавлять к нему постепенно. В else-statement
вашем if-expression
вы можете составить список.
Добавляйте символ в этот список только тогда, когда ранее добавленный символ в списке не является текущим.
dedup_word = [None,]
word = input()
for current_entry in word:
previous_entry = dedup_word[-1]
if previous_entry != current_entry:
dedup_word.append(current_entry)
output = ''.join(filter(None, dedup_word))
print(output)
Вы могли бы даже реорганизовать свою текущую программу, и else-statement
после прочтения вашего ввода тело будет основной программой.