如何有效地删除Python中的单字母单词

如何有效地删除Python中的单字母单词,python,Python,我想使用Python函数删除单字母单词,例如a,ie,eg,bf,yo l o,cy l 我当前的代码如下所示 def remove_single_letters(concept): mystring = "valid" if len(concept) == 1: mystring = "invalid" if len(concept)>1: validation = [] splits = concept.spl

我想使用Python函数删除单字母单词,例如
a
ie
eg
bf
yo l o
cy 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中实现它。

这里有一个单行解决方案:

def remove_single_letters(concept):
    return ["valid", "invalid"][concept.count(" ") >= len(concept) // 2]
更新:请注意,这是较短和酷炫的外观,但不一定运行得更快

说明:

  • concept.count(“”)
    :返回字符串中的空格数
  • =len(concept)//2
    :如果字符串的一半以上是空格,则返回True(当提到@user202729时,合法单词之间有多个空格时,返回失败)
  • [“valid”,“invalid”][结果]
    :这部分只是为了好玩:如果
    结果
    ,则返回第一个元素,如果
    结果
    (因为
    等于
    0
    等于
    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"

如果你的程序运行良好,你也可以发布它。@Selcuk Hii,你能解释一下,用bool索引2元素列表的代码行看起来很酷,但对于真正的代码,只需使用一个条件语句……使用
(“valid”,“invalid”)
可以说更好,但我想把它作为一个列表也可以,如果有多个连续的空格,这个方法就失败了。@user202729这就是为什么我说它可能更好的原因。如果字节码和源代码说的是不同的话,那就不太合适了。我猜要求是不应该有连续的字母。此解决方案将把ello标记为无效。谢谢@Selcuk。我包含了再现问题原始行为的解决方案。我误解了这个问题,并提出了一种检查字符串中是否存在单个字母的方法。