如何检查对象是否为字符串列表?我只能检查对象是否为字符串:
def checktype(obj):
if isinstance(obj,str):
print "It's a string"
obj1 = ['foo','bar','bar','black','sheet']
obj2 = [1,2,3,4,5,'bar']
obj3 = 'bar'
for i in [obj1,obj2,obj3]:
checktype(i)
期望输出:
It's a list of strings
It's not a list of strings or a single string
It's a single string
到目前为止,我读到的答案在给出一个非字符串的非列表时会引起注释……而且也是不可编辑的。这个问题在:
In Python, how do I determine if an object is iterable?
采用duck输入法:
输出:
要测试列表中的所有项是否都是字符串,请使用内置的^{} 和生成器:
注意,如果您的列表是空的,那么仍然会返回
True
,因为从技术上讲,这是一个0字符串的列表。但是,由于您希望将[]
视为False
,因此需要执行以下操作:所以,你的功能应该是这样的:
如果该函数的输入是一个不为空且完全由字符串组成的列表,则它只返回
True
。其他任何东西(如[]
、['a', 1]
、('a', 'b')
等)都会使它返回False
。另外,以这种方式使用
all
还有一个额外的好处,因为它停止检查它找到的第一个返回False
(不是字符串)的项。这使您能够非常高效地处理非常大的列表。我想是这样吧?你可以检查一下是不是一根线。
为什么要检查
basestring
而不是str
?您应该检查
basestring
,而不是str
,因为它是一个公共类,str
和unicode
类型都从中继承。只检查str
会遗漏unicode
类型。根据Steven Rumbalski's建议,如果需要特别检查字符串列表,可以这样做。
编辑-根据abarnert's建议,您还可以检查
list
而不是not isinstance(lst, basestring)
,代码将被重写为。我们可以不用一句台词。
相关问题 更多 >
编程相关推荐