s = 'azcbobobegghakl'
result = []
final = []
for letters in s:
result += letters
if result == sorted(result) and len(result) >= len(final):
final = list(result)
elif result != sorted(result):
result = [result[len(result)-1]]
print "".join(final)
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)
你有几件事要处理。第一,当你使用。。。在
这不仅仅是将结果中的值赋给final。它将变量final指向包含“result”也指向的列表的内存地址。所以如果结果改变了,那就是最终结果。要在结果中指定值,请使用。。。在
^{pr2}$这将为您提供列表从头到尾的一个片段的值。或者你可以用。。。在
更改之后,需要删除elif语句中的长度比较。在
编辑代码:
这里的问题是
result
和final
指向同一个列表。 您可能认为当您发出result += letters
时,+=
将创建一个新列表,但它不会:但是,当您使用
^{pr2}$x = x + [3]
时:有关此行为的解释,请参见this问题。当
letters
是字符串中最后一个a
字符时,for
循环(原始代码的编辑:)中发生的情况:final
和{['b', 'e', 'g', 'g', 'h']
。在result += 'a'
final
和{['b', 'e', 'g', 'g', 'h', 'a']
。在elif
块,结果将指向一个新列表['a']
,而final
仍然指向['b', 'e', 'g', 'g', 'h', 'a']
。在final
之后将不再更新因此,您的原始代码(在编辑之前)可以通过更改来修复
result += letters
到
result = result + [letters]
:相关问题 更多 >
编程相关推荐