这里的问题是结果和最终指向同一个列表.
您可能认为=在发出result = letters时会创建一个新列表,但它不会:
>>> x = [1,2]
>>> y = x
>>> x += [3]
>>> x
[1, 2, 3]
>>> y
[1, 2, 3]
>>> x is y
True
但是,当你使用x = x [3]时:
>>> x = [1,2]
>>> y = x
>>> x = x + [3]
>>> x
[1, 2, 3]
>>> y
[1, 2]
>>> x is y
False
有关此行为的说明,请参阅this问题.当字母是字符串中的最后一个字符时,这就是for循环(编辑:原始代码)中发生的情况:
>在开头,结局和结果都指向[‘b’,’e’,’g’,’g’,’h’].
>在结果=’a’结束后,结果都指向[‘b’,’e’,’g’,’g’,’h’,’a’].
>现在输入elif块,结果将指向一个新列表[‘a’],而final仍然指向[‘b’,’e’,’g’,’g’,’h’,’a’ ].
>此后永远不会再次更新
因此,您的原始代码(在编辑它之前)可以通过更改来修复
结果=字母
至
result =结果[字母]:
s = 'azcbobobegghakl'
result = []
final = []
for letters in s:
result = result + [letters]
if result == sorted(result) and len(result) >= len(final):
final=result
elif result != sorted(result):
result = [result[len(result)-1]]
print(final)