字符串操作执行不正确



main.py我有这个

import RemoveShortWords as rs
procLine="the   in  shear flow past a flat plate"
procLine = rs.RemomeOneTwoCharWords(procLine)
print(procLine)

这是RemoveShortWords.py

def RemomeOneTwoCharWords(procLine):
procLine = str(procLine)
for word in procLine.split():
if(len(word)<=2):
procLine = procLine.replace(word,"")

return procLine

打印返回此

Sher Flow PST FLT PLTE

如您所见,函数删除少于 2 个字符的单词。 但是,出于某种原因,它也删除了所有"a"字符。例如,"flat"变成了"flt">

为什么?

变量procLine具有the in shear flow past a flat plate

procLine.split()['the'

, 'in', 'shear', 'flow', 'past', 'a', 'flat', 'plate']在循环for,它会查找a并将a替换为空或删除字符procLine注意:如果某些单词与in一起,它会做同样的事情,例如stringstrg.

相反,我会建议类似list comprehension可能起作用的东西:

procLine = ' '.join([w for w in procLine.split() if len(w)>2])

replace替换所有匹配项。

str.replace(旧,新[,计数](

返回字符串的副本,其中所有出现的子字符串 old 替换为 new。如果给定可选参数计数,则仅替换第一个计数。

文档

因此,一旦输入中到达单词"a",procLine.replace("a", "")将删除整个字符串中的所有"a"。如果您只想替换少于 2 个字符的单词,您可以使用例如列表理解:

return ' '.join([s for s in procLine.split(' ') if len(s) > 2])

我认为让你感到困惑的一件事是procLine.split((实际上并没有修改procLine。

def RemomeOneTwoCharWords(procLine):
procLine = str(procLine)
temp = ""
for word in procLine.split():
if len(word)>=2:
temp += word + " "
return(temp)

procLine="the   in  shear flow past a flat plate"
procLine = RemomeOneTwoCharWords(procLine)
print(procLine)

the shear flow past flat plate

最新更新