如何在Python中有效删除单个字母词

时间:2019-01-08 06:27:49

标签: python

我想使用Python删除单个字母单词,例如ai ee gb f fy o l oc y l功能。

我当前的代码如下。

def remove_single_letters(concept):
    mystring = "valid"

    if len(concept) == 1:
        mystring = "invalid"

    if len(concept)>1:
        validation = []
        splits = concept.split()
        for item in splits:
            if len(item) > 1:
                validation.append("valid")
        if len(validation) != 1:
            mystring = "invalid"
    return mystring

print(remove_single_letters("b f f"))

工作正常。但是,我想知道是否有更有效的方法(用更少的时间)在python中完成。

2 个答案:

答案 0 :(得分:6)

这里是单行解决方案:

def remove_single_letters(concept):
    return ["valid", "invalid"][concept.count(" ") >= len(concept) // 2]

更新:请注意,它虽然较短且很酷,但不一定运行得更快。

说明:

  • concept.count(" "):返回字符串中的空格数
  • >= len(concept) // 2:如果字符串的一半以上是空格,则返回True(当合法单词之间有多个空格时,如@ user202729所述,它将失败)
  • ["valid", "invalid"][result]:这部分很有趣:如果resultFalse,则返回第一个元素;如果result是{{1},则返回第二个元素。 }(因为True等于False,而0等于True)。

答案 1 :(得分:1)

如果您要检查字符串中是否存在1个字母字符,我将寻求一个更简洁的解决方案(但由于两个解决方案都为O(n)而不会更快):

remove_single_letters = lambda concept:"invalid" if 1 in [len(item) for item in concept.split()] else "valid"
print(remove_single_letters("a b c"))
#prints invalid

一个普通的函数是这样的:

def remove_single_letters(concept):
    return "invalid" if 1 in [len(item) for item in concept.split()] else "valid"

它们都检查拆分输入中元素的长度,以找到长度为1的任何项,并且由于split()而对多个空格不敏感。

如果要检查完全由单个字符组成的字符串:

def remove_single_letters(concept):
    u = set(len(item) for item in concept.split()) 
    return "invalid" if len(u) == 1 and 1 in u else "valid"