3

目前我的代码正在查看一个巨大的字符串。它像这样比较字符串:

a = 0
for letter in my_str:
    a += 1
    if letter <= my_str[a]:

当我收到“字符串索引超出范围”错误时,它会一直比较直到结束。我知道这是因为它试图将字符串中的最后一个字符与下一个字符(不存在)进行比较 如何解决这个问题!我觉得我已经尝试了一切。帮助表示赞赏。

编辑:好像我刚刚想出了我的解决方案......无论如何,谢谢。

4

4 回答 4

2

使用来自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
于 2012-07-16T04:33:19.773 回答
2

在迭代字符串时避免使用索引来处理字符串。不要将当前字母与下一个字母进行比较,而是将当前字母与一个字母进行比较,这是您在最后一次循环中保存的。将循环外的“previous”变量初始化为对第一遍有意义的东西。

lastletter = ""
for letter in text:
    if lastletter <= letter:   # always true for first char
        # do something
    lastletter = letter
于 2012-07-16T04:41:19.350 回答
1

你可能想要的是

for i in range(len(str)-1):
    if str[i] <= str[i+1]:
于 2012-07-16T04:34:15.627 回答
-2

我只是在开头添加了另一个 if 语句,如下所示..

if a < len(str):

不知道为什么我花了这么长时间才弄清楚!

于 2012-07-16T04:36:13.560 回答