我想使用Python删除单个字母单词,例如a
,i e
,e g
,b f f
,y o l o
,c 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中完成。
答案 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]
:这部分很有趣:如果result
是False
,则返回第一个元素;如果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"