字符串操作执行不正确

时间:2018-09-23 00:50:32

标签: python python-3.x

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

print返回此

  

纯粹的流量pst flt plte

如您所见,

该功能删除了少于2个字符的单词。 但是,由于某种原因,它也删除了所有“ a”字符。例如,“ flat”变成“ flt”

为什么?

3 个答案:

答案 0 :(得分:6)

变量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])

答案 1 :(得分:3)

super.string替换所有事件。

  

str.replace(old,new [,count])

     

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

Documentation

因此,一旦输入中到达单词“ a”,replace将删除整个字符串中的所有“ a”。如果您只想替换少于2个字符的单词,则可以使用例如list-comprehension:

procLine.replace("a", "")

答案 2 :(得分:0)

我认为让您感到困惑的一件事是 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