您好我开始学习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行会阻止该错误发生,我看不出有什么问题。话虽如此,我的代码效率太低了吗?
谢谢!
答案 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