Qualcosa di simile, presumo? Potresti fare alcuni controlli per vedere se si tratta di una singola stringa.
>>> 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
Perché controllare per basestring
invece di str
?
Si dovrebbe controllare per basestring
invece di str
dal momento che è una classe comune da cui entrambi i tipi str
e unicode
ereditano da. Il controllo solo dello str
esclude i tipi unicode
.
Come da Steven Rumbalski's suggerimenti, se è necessario controllare in modo specifico un elenco di stringhe, è possibile farlo.
>>> 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 - Come da abarnert's suggerimento, si potrebbe anche verificare la presenza di un list
invece di not isinstance(lst, basestring)
, il codice sarebbe ottenere riscritto come.
>>> 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
Allontanandoci da una fodera, potremmo usare.
>>> def is_list_of_strings(lst):
if lst and isinstance(lst, list):
return all(isinstance(elem, basestring) for elem in lst)
else:
return False
Per chiarezza vorrei rinominare 'checktype' a' is_list_of_string'. –
Un caso limite da considerare: '' [] 'un elenco di stringhe o no? – abarnert
nope '[]' non sarebbe una lista di stringhe, è una lista vuota. – alvas