我正在处理一项需要对字符串中的重复字母进行排序和删除的任务。我最终让这个函数做我想做的事,但运气不好。我不知道为什么这些代码行会产生不同的输出。有人能帮我理解吗?
def format_string(string1):
sorted1 = sorted(string1)
print(sorted1)
i = 0
while i < len(sorted1) - 1:
if sorted1[i] == sorted1[i + 1]:
del sorted1[i + 1]
else:
i += 1
return sorted1
print(format_string("aretheyhere"))
<块引用>
['a', 'e', 'e', 'e', 'e', 'h', 'h', 'r', 'r', 't', 'y']> <块引用>
['a', 'e', 'h', 'r', 't', 'y']
#这就是我想要的。但这些看似相似的线条却没有。
def format_string(string1):
sorted1 = sorted(string1)
print(sorted1)
i = 0
j = i + 1
while i < len(sorted1) - 1:
if sorted1[i] == sorted1[j]:
del sorted1[j]
else:
i += 1
return sorted1
print(format_string("aretheyhere"))
<块引用>
['a', 'e', 'e', 'e', 'e', 'h', 'h', 'r', 'r', 't', 'y']> <块引用>
['a', 'y']
def format_string(string1):
sorted1 = sorted(string1)
print(sorted1)
i = 0
while i < len(sorted1) - 1:
if sorted1[i] == sorted1[i + 1]:
del sorted1[i + 1]
i += 1
return sorted1
print(format_string("aretheyhere"))
<块引用>
['a', 'e', 'e', 'e', 'e', 'h', 'h', 'r', 'r', 't', 'y']> <块引用>
['a', 'e', 'e', 'h', 'r', 't', 'y']
这里改变输出的关键区别是什么?
答案 0 :(得分:0)
变量 j
不会增加,因为它没有在 while 循环内更新,即在将 i
的值设置为 j
后更改 i+1
的值不改变 j
的值。例如,此函数将给出与第一个相同的结果,因为 j
的值在 while 循环内更新:
def format_string(string1):
sorted1 = sorted(string1)
print(sorted1)
i = 0
while i < len(sorted1) - 1:
j = i + 1
if sorted1[i] == sorted1[j]:
del sorted1[j]
else:
i += 1
return sorted1
print(format_string("aretheyhere"))