Что-то вроде этого, я полагаю? Вы можете сделать некоторые проверки, чтобы увидеть, является ли это одной строкой.
>>> 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's, если вам нужно специально проверить список строк, вы могли бы сделать.
>>> 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
EDIT - По abarnert's предложение, вы можете также проверить на list
вместо 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
Для ясности я бы переименовать 'checktype' в' is_list_of_string'. –
Один краевой случай для рассмотрения: '[]' список строк или нет? – abarnert
nope '[]' не будет списком строки, это пустой список. – alvas