2016-05-21 62 views

回答

10

只需使用all()并检查类型与isinstance()

>>> l = ["one", "two", 3] 
>>> all(isinstance(item, str) for item in l) 
False 
>>> l = ["one", "two", '3'] 
>>> all(isinstance(item, str) for item in l) 
True 
+0

还有一个问题,有没有办法检查列表中是否没有数字字符串。例如:[“one”,“two”,“3”]将返回false – vkumar

+0

@TekhenyGhemor - isinstance(item,str)而不是item.lstrip(' - ')。isdigit()'为零或正整数。如果你想检查浮点数,复数等,它会变得更加复杂。 – TigerhawkT3

+0

@XamuelSchulman - 你的意思是摆脱'all()'和生成器表达式(不是列表理解)并创建一个传统的'for。 .else'循环?或者你的意思是把当前的代码分解成多行?我不明白这些如何帮助。这已经是简洁明了的规范。 – TigerhawkT3

1

回答@ TekhenyGhemor的后续问题:有没有一种方法来检查列表中是否没有数字字符串。例如:[“one”,“two”,“3”]将返回false

是的。您可以将字符串转换为数字,并确保它会引发一个例外:

def isfloatstr(x): 
    try: 
     float(x) 
     return True 
    except ValueError: 
     return False 

def valid_list(L): 
    return all((isinstance(el, str) and not isfloatstr(el)) for el in L) 

检查:

>>> valid_list(["one", "two", "3"]) 
False 

>>> valid_list(["one", "two", "3a"]) 
True 

>>> valid_list(["one", "two", 0]) 
False 

在文献[5]:valid_list([ “一”, “二”,“三个]]) 输出[5]:真

相关问题