如果我在python中有一个列表,是否有函数告诉我列表中的所有项目是否都是字符串?如何检查列表中的所有项目是否为字符串
例如: ["one", "two", 3]
将返回False
,和["one", "two", "three"]
将返回True
。
如果我在python中有一个列表,是否有函数告诉我列表中的所有项目是否都是字符串?如何检查列表中的所有项目是否为字符串
例如: ["one", "two", 3]
将返回False
,和["one", "two", "three"]
将返回True
。
只需使用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
回答@ 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]:真
还有一个问题,有没有办法检查列表中是否没有数字字符串。例如:[“one”,“two”,“3”]将返回false – vkumar
@TekhenyGhemor - isinstance(item,str)而不是item.lstrip(' - ')。isdigit()'为零或正整数。如果你想检查浮点数,复数等,它会变得更加复杂。 – TigerhawkT3
@XamuelSchulman - 你的意思是摆脱'all()'和生成器表达式(不是列表理解)并创建一个传统的'for。 .else'循环?或者你的意思是把当前的代码分解成多行?我不明白这些如何帮助。这已经是简洁明了的规范。 – TigerhawkT3