这是我编写的用于从字符串
中删除逗号和句号的代码forbidden=(",",".")
text=input("Your sentence")
for i in range(0,len(text)):
if text[i] in forbidden:
text=text.replace(text[i],'')
i-=1
print text
我的输入是a,n
但它给出了一个错误,说字符串索引超出范围
有人可以解释原因吗?
答案 0 :(得分:1)
您可以使用re
模块
>>> import re
>>> s = "asdsd,dweds.,sdfsf."
>>> re.sub('(,|\.)', '', s)
'asdsddwedssdfsf'
答案 1 :(得分:1)
你可以用一个简单的in循环迭代一个字符串,你不需要打扰索引。
forbidden=(",",".")
text=input("Your sentence")
for c in text:
if c in forbidden:
text=text.replace(c,'')
print text
答案 2 :(得分:0)
我看到两个问题:
len(text)
在循环开始时只计算一次。 text
在您迭代它时收缩的事实,对i
稍后会有什么价值没有任何影响。i
对下一次迭代中i
的值没有影响。 Python只是简单地压缩旧值而不看它。如果您绝对致力于通过迭代text
的索引来实现此算法,那么使用while
循环将解决这两个问题。一个while
循环'条件在每次迭代时进行评估,并且您可以完全控制您递增/递减的值。
forbidden=(",",".")
text=raw_input("Your sentence: ")
i = 0
while i < len(text):
if text[i] in forbidden:
text=text.replace(text[i],'')
else:
i+=1
print text
输出:
Your sentence: foo,bar,baz.qux,troz,zort.
foobarbazquxtrozzort
...但是,如果您对不同的方法持开放态度,那么如果您对禁用的字符而不是text
进行迭代,则会为您节省很多精力。
forbidden=(",",".")
text=raw_input("Your sentence: ")
for c in forbidden:
text = text.replace(c, "")
print text
答案 3 :(得分:0)
您可以使用list comprehensions
过滤点和逗号,然后使用reduce()
将元素添加到string
中,如:
forbidden = (",", ".")
text = 'a,n'
text = reduce(lambda x, y: x + y, [i for i in text if i not in forbidden])
print text
或者您可以使用
text = ''.join([i for i in text if i not in forbidden])
输出:
an