这里的问题是,
result和
final指向同一个列表。您可能会考虑
+=在发出时会创建一个新列表
result += letters,但不会:
>>> x = [1,2]>>> y = x>>> x += [3]>>> x[1, 2, 3]>>> y[1, 2, 3]>>> x is yTrue
但是,当您使用时
x = x + [3]:
>>> x = [1,2]>>> y = x>>> x = x + [3]>>> x[1, 2, 3]>>> y[1, 2]>>> x is yFalse
有关此行为的解释,看到这个问题。这是您的
for循环中发生的事情(原始代码的编辑:),这是字符串中
letters的最后一个
a字符:
- 刚开始时,
final
并result
都指向['b', 'e', 'g', 'g', 'h']
。 - 之后
result += 'a'
final
和result
都指向['b', 'e', 'g', 'g', 'h', 'a']
。 - 现在
elif
输入了块,结果将指向一个新列表['a']
,而final
仍然指向['b', 'e', 'g', 'g', 'h', 'a']
。 final
此后将不再更新
因此,可以通过更改原始代码(在编辑之前)进行修复
result += letters
至
result = result + [letters]:
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)



