>>> import collections.abc
>>> isinstance([0, 10, 20, 30], collections.abc.Sequence)
True
>>> isinstance(50, collections.abc.Sequence)
False
注意: isinstance
还支持类的元组,应避免使用和是不必要的。
您也可以检查 not isinstance(x, (str, unicode))
正如@2080以及这里所指出的一样,这对于numpy
数组是不起作用的。例如:
>>> import collections.abc
>>> import numpy as np
>>> isinstance((1, 2, 3), collections.abc.Sequence)
True
>>> isinstance(np.array([1, 2, 3]), collections.abc.Sequence)
False
如果您有需要,可以尝试来自@jpaddison3的答案:
>>> hasattr(np.array([1, 2, 3]), "__len__")
True
>>> hasattr([1, 2, 3], "__len__")
True
>>> hasattr((1, 2, 3), "__len__")
True
然而正如这里所指出的,这种方法也并非完美,会错误地(至少在我看来)将字典分类为序列,而使用collections.abc.Sequence
类的isinstance
可以正确地分类:
>>> hasattr({"a": 1}, "__len__")
True
>>> from numpy.distutils.misc_util import is_sequence
>>> is_sequence({"a": 1})
True
>>> isinstance({"a": 1}, collections.abc.Sequence)
False
您可以将解决方案定制为像这样,根据您的需求添加更多类型到isinstance
:
您可以根据需要将更多类型添加到isinstance
中,以定制解决方案,例如:
>>> isinstance(np.array([1, 2, 3]), (collections.abc.Sequence, np.ndarray))
True
>>> isinstance([1, 2, 3], (collections.abc.Sequence, np.ndarray))
True
type
吗? - Sukrit Kalra