在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
一起,它会做同样的事情,例如string
到strg
.
相反,我会建议类似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