索引错误:在Python3中列出特定测试用例的超出范围的索引,即使在制作角点用例之后也是如此



我试图解决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))

令人惊讶的是,这个错误出现在少数测试用例中,而不是所有的测试用例,因为索引错误通常每次都会出现,而不是偶尔出现。感谢其他Python用户的任何帮助。

您的程序会对单词中的连续字符进行重复数据消除。

您在else-statement中遇到错误,因为您正在删除列表中的项目,同时还在同一循环中读取它。

因此,列表的大小在循环通过后发生变化,其中一个字符被删除

您可以通过制作列表的副本来解决此问题,一个用于迭代,另一个用于从中删除项目。

但是,我建议制作一个结果列表,并逐步添加到其中。在您的if-expressionelse-statement中,您可以列出一个列表。

仅当以前在中添加的字符列表不是当前列表。

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的主体作为主程序。

最新更新