如何有效地删除Python中的单字母单词
我想使用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
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(“”)
:如果字符串的一半以上是空格,则返回True(当提到@user202729时,合法单词之间有多个空格时,返回失败)=len(concept)//2
:这部分只是为了好玩:如果[“valid”,“invalid”][结果]
为结果
,则返回第一个元素,如果假
为结果
(因为真
等于假
而0
等于真
),则返回第二个元素1
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。我包含了再现问题原始行为的解决方案。我误解了这个问题,并提出了一种检查字符串中是否存在单个字母的方法。