<p>我想是这样吧?你可以检查一下是不是一根线。</p>
<pre><code>>>> 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
</code></pre>
<p>为什么要检查<code>basestring</code>而不是<code>str</code>?</strong></p>
<p>您应该检查<code>basestring</code>,而不是<code>str</code>,因为它是一个公共类,<code>str</code>和<code>unicode</code>类型都从中继承。只检查<code>str</code>会遗漏<code>unicode</code>类型。</p>
<p>根据<a href="https://stackoverflow.com/users/1322401/steven-rumbalski">Steven Rumbalski's</a>建议,如果需要特别检查字符串列表,可以这样做。</p>
<pre><code>>>> 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
</code></pre>
<p><strong>编辑</strong>-根据<a href="https://stackoverflow.com/users/908494/abarnert">abarnert's</a>建议,您还可以检查<code>list</code>而不是<code>not isinstance(lst, basestring)</code>,代码将被重写为。</p>
<pre><code>>>> 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
</code></pre>
<p>我们可以不用一句台词。</p>
<pre><code>>>> def is_list_of_strings(lst):
if lst and isinstance(lst, list):
return all(isinstance(elem, basestring) for elem in lst)
else:
return False
</code></pre>