像这样的东西,我猜?您可以进行一些检查以查看它是否是单个字符串。
>>> def checktype(obj):
return bool(obj) and all(isinstance(elem, basestring) for elem in obj)
>>> obj1 = ['foo','bar','bar','black','sheet']
>>> obj2 = [1,2,3,4,5,'bar']
>>> obj3 = 'bar'
>>> for i in [obj1, obj2, obj3] :
print checktype(i)
True
False
True
为什么要检查basestring
而不是str
?
您应该检查,basestring
而不是str
因为它是一个公共类,str
和unicode
类型都从该类继承。只检查str
离开unicode
类型。
根据Steven Rumbalski 的建议,如果您需要专门检查字符串列表,您可以这样做。
>>> def is_list_of_strings(lst):
return bool(lst) and not isinstance(lst, basestring) and all(isinstance(elem, basestring) for elem in lst)
# You could break it down into `if-else` constructs to make it clearer to read.
>>> for i in [obj1, obj2, obj3] :
print is_list_of_strings(i)
True
False
False
编辑- 根据abarnert 的建议,您还可以检查 alist
而不是not isinstance(lst, basestring)
,代码将被重写为。
>>> def is_list_of_strings(lst):
return bool(lst) and isinstance(lst, list) and all(isinstance(elem, basestring) for elem in lst)
# You could break it down into `if-else` constructs to make it clearer to read.
>>> for i in [obj1, obj2, obj3] :
print is_list_of_strings(i)
True
False
False
远离一个衬垫,我们可以使用。
>>> def is_list_of_strings(lst):
if lst and isinstance(lst, list):
return all(isinstance(elem, basestring) for elem in lst)
else:
return False