Python for循环崩溃,因为字符串长度更改

时间:2014-10-24 04:40:38

标签: python

有一个非常愚蠢的问题。我正在迭代一个字符串并删除所有非字母字符。问题是,当我删除它们时,字符串的长度会减少,并且我的循环崩溃,因为我越界了。

for x in s:
    if x.isalpha() == False:
        s = s.replace(x, "")

4 个答案:

答案 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()返回这些字符的字符串。