Python检查列表中是否存在下一个元素

时间:2015-09-12 07:11:30

标签: python

我正在用Python做一些挑战。

我有以下代码:

def SimpleSymbols(str):
    letters = []
    results = []

    for i in range(len(str)):
        if str[i] != '=' and str[i] != '+':
            letters.append(str[i])

            if str[i-1] == '+' and str[i+1] == '+':
                results.append(str[i])

    return len(letters) == len(results)

https://repl.it/BH1s/1

如果我检查print(SimpleSymbols('++d+===+c++=='))一切顺利,但如果我检查print(SimpleSymbols('++d+===+c++==+a'))

我收到此错误:

  

Traceback(最近一次调用最后一次):文件“python”,第15行,in      在SimpleSymbols IndexError中输入文件“python”,第9行:string   指数超出范围

有人可以解释一下,为什么?

4 个答案:

答案 0 :(得分:2)

你试图访问索引str[i+1],这是在最后一次迭代中超出界限...

如果必须使用它,请将循环限制为仅运行len(str)-1。要处理这种情况:'++d+===+c++==+a'您可以在循环后添加一个检查,以验证前一个元素不是+(或将其添加到{循环中的{1}}条件。)

此外,将变量if命名为python内置函数是不好的做法!

答案 1 :(得分:1)

因为当你到达str的最后一个字符并且它是一个字母时,str[i+1]就不存在了。

您需要将条件放在try except块中以避免这种情况发生。 (当except被提出时,您必须决定在IndexError中做什么)

def SimpleSymbols(str):
    letters = []
    results = []

    for i in range(len(str)):
        if str[i] != '=' and str[i] != '+':
            letters.append(str[i])
        try:
            if str[i-1] == '+' and str[i+1] == '+':
                results.append(str[i])
        except IndexError:
            do what needs to be done in this case.

    return len(letters) == len(results)

答案 2 :(得分:1)

def SimpleSymbols(str):
    letters = []
    results = []

    for i in range(len(str)):
        if str[i] != '=' and str[i] != '+':
            letters.append(str[i])

            if i < len(str)-1 and str[i-1] == '+' and str[i+1] == '+':
                results.append(str[i])

    return len(letters) == len(results)

print SimpleSymbols("=+b+a")

以这种方式编写代码, 一切都会好的。

答案 3 :(得分:1)

您似乎在寻找既不是+也不是=的符号,并检查所有这些符号是否都被跟踪并且前面有+

第一个和最后一个符号是特殊情况,因为它们要么不在前面,要么后跟任何内容,因此,如果它们既不是+也不是=,那么你的函数应该返回False

因为,在python中,some_string[-1]返回字符串的最后一个字符,如果第一个字符既不是+也不是=,则循环不会中断。甚至返回True以获取c++等输入。但是,对于最后一个字符,您的代码会引发预期的IndexError

你可以:

  • 检查第一个或最后一个符号是否在('+', '=')中并返回False,如果它们不在+之前或之后。然后你可以在内部字符串上运行你的循环:

    def SimpleSymbols(symbols):
        control = ('+', '=')
    
        if symbols[0] not in control or symbols[-1] not in control:
            return False
    
        for last_index, symbol in enumerate(symbols[1:-1]):
            next_index = last_index + 2
            if letter not in control:
                if symbols[last_index] != '+' or symbols[next_index] != '+':
                    # Found a letter that is not enclosed in two '+'
                    return False
        return True
    
  • 使用正则表达式来计算不在{​​{1}}中的符号和包含在两个('+', '=')内的同一组中的符号的出现次数:

    +