有一个非常愚蠢的问题。我正在迭代一个字符串并删除所有非字母字符。问题是,当我删除它们时,字符串的长度会减少,并且我的循环崩溃,因为我越界了。
for x in s:
if x.isalpha() == False:
s = s.replace(x, "")
答案 0 :(得分:3)
使用filter
!
s = filter(str.isalpha, s)
答案 1 :(得分:2)
使用正则表达式!
import re
regex = re.compile('[^a-zA-Z]') #Create a regex that allows on only A-Z and a-z
regex.sub('', s) #This will return the string, stripped of non alphabetical characters
答案 2 :(得分:1)
如果你坚持使用循环,那么诀窍就是从头到尾循环......
这是处理长度变化的有用技巧。
for x in s[::-1]:
if x.isalpha() == False:
s = s.replace(x, "")
编辑:我忘了提及,要翻转字符串,您可以执行s[::-1]
答案 3 :(得分:0)
列表理解是最常用的Pythonic方式。
s = ''.join([x for x in s if x.isalpha()])
list comprehension仅构建一个包含字母字符的列表,join()
返回这些字符的字符串。