Python IndexError:字符串超出范围

时间:2018-04-08 06:50:12

标签: python

您好我开始学习Python并且遇到了问题。这是我的一部分功能:

for i in range(0,len(list(string))):
    if string[i] in punctuation:
        if i == len(list(string))-1:
             new_string += string[i]
        if string[i+1] or string[i-1] == ' ':
            continue
        elif string[i+1] or string[i-1] in punctuation:
            continue
        else:
            new_string += string[i]

    elif string[i] in numbers:
        new_string += ' '

    else:
        new_string += string[i]

这个片段是获取一个字符串并返回一个new_string,它取出所有标点符号,但不是字母之间的标点符号,例如叛逆者(例如jacob)或超级(例如,长期建立)。但是,我收到一个错误说:

if doc[i+1] or doc[i-1] == ' ':
IndexError: string index out of range

我认为我的代码中的第3行会阻止该错误发生,我看不出有什么问题。话虽如此,我的代码效率太低了吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

为避免出现IndexError,有时可能更容易调整范围,如下所示:

from string import punctuation as punct

def remove_punctuation(old_string):
    """Remove punctuation from "string" if not between 2 letters."""
    new_string =''
    s = ' ' + old_string + ' '
    for i in range(1, len(s) - 1):
        if s[i] in punct and (not s[i - 1].isalpha() or not s[i + 1].isalpha()):
            continue
        else:
            new_string += s[i]
    return new_string