概述
在执行给定任务的代码时,我会继续获取最长的字符串以及迭代中的下一个字母.例如,如果我使用
s = 'azcbobobegghakl'
当答案应该是“beggh”时,我会将“beggha”作为最长的字符串.我试过的所有随机字母串都会出现同样的错误.
我已经发现在“result = letters”语句之后添加了额外的字母,但我不确定如何修复它.这是我的代码:
s = 'azcbobobegghakl'
result = []
final = []
for letters in s:
result += letters
if result == sorted(result) and len(result) >= len(final):
final=result
elif result != sorted(result):
result = [result[len(result)-1]]
print "".join(final)
解决方法:
这里的问题是结果和最终指向同一个列表.
您可能认为=在发出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)
标签:python,string,python-2-7,substring
最后
以上就是专注水壶为你收集整理的python字符串按字母大小排序_python – 在给定字符串中按字母顺序查找字母的最长子字符串...的全部内容,希望文章能够帮你解决python字符串按字母大小排序_python – 在给定字符串中按字母顺序查找字母的最长子字符串...所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复