Python:检查对象是否是字符串列表

标签 python types isinstance

如何检查一个对象是否是一个字符串列表?我只能检查一个对象是否是这样的字符串:

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

最佳答案

我想是这样的吧?您可以进行一些检查以查看它是否是单个字符串。

>>> 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 因为它是 strunicode 的通用类> 类型继承自。仅检查 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

编辑 - 根据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

关于Python:检查对象是否是字符串列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18495098/

相关文章:

python - numpy.where() 在这个例子中究竟是如何选择元素的?

python - 如何迭代 pandas 数据帧行,查找字符串并分成列?

C# .NET - ItemCollection 在作为 IList<type> 传递时不编译

Python:检查变量类型

c++ - 如何在C++中检查数据类型?

python - DjangoRestFramework 序列化程序的条件字段要求

python - Argparse 中的异常

c++ - 来自字符串的动态结构名称

types - julia 调度参数化抽象类型

user-interface - Modelica:检查可替换包或模型的相等性