目前我的代码正在查看一个巨大的字符串。它像这样比较字符串:
a = 0
for letter in my_str:
a += 1
if letter <= my_str[a]:
当我收到“字符串索引超出范围”错误时,它会一直比较直到结束。我知道这是因为它试图将字符串中的最后一个字符与下一个字符(不存在)进行比较 如何解决这个问题!我觉得我已经尝试了一切。帮助表示赞赏。
编辑:好像我刚刚想出了我的解决方案......无论如何,谢谢。
目前我的代码正在查看一个巨大的字符串。它像这样比较字符串:
a = 0
for letter in my_str:
a += 1
if letter <= my_str[a]:
当我收到“字符串索引超出范围”错误时,它会一直比较直到结束。我知道这是因为它试图将字符串中的最后一个字符与下一个字符(不存在)进行比较 如何解决这个问题!我觉得我已经尝试了一切。帮助表示赞赏。
编辑:好像我刚刚想出了我的解决方案......无论如何,谢谢。
使用来自itertools的成对配方
>>> from itertools import tee, izip
>>> def pairwise(iterable):
"s -> (s0,s1), (s1,s2), (s2, s3), ..."
a, b = tee(iterable)
next(b, None)
return izip(a, b)
>>> text = 'abc'
>>> for x, y in pairwise(text):
if x <= y:
pass
在迭代字符串时避免使用索引来处理字符串。不要将当前字母与下一个字母进行比较,而是将当前字母与前一个字母进行比较,这是您在最后一次循环中保存的。将循环外的“previous”变量初始化为对第一遍有意义的东西。
lastletter = ""
for letter in text:
if lastletter <= letter: # always true for first char
# do something
lastletter = letter
你可能想要的是
for i in range(len(str)-1):
if str[i] <= str[i+1]:
我只是在开头添加了另一个 if 语句,如下所示..
if a < len(str):
不知道为什么我花了这么长时间才弄清楚!