collections.Sequence
只适用于序列对象,它们是一种非常特定的可迭代对象。顺便提一下,numpy.ndarray
(由numpy.arange
返回)不是序列。
您需要测试是否为collections.Iterable
,它表示任何可迭代对象:
>>> isinstance([1, 2, 3], collections.Iterable)
True
>> isinstance(np.arange(10), collections.Iterable)
True
>>> isinstance(1, collections.Iterable)
False
>>>
或者使用
collections.Sized
,该对象代表任何可以使用
len
的对象:
>>> isinstance([1, 2, 3], collections.Sized)
True
>>> isinstance(np.arange(10), collections.Sized)
True
>>> isinstance(1, collections.Sized)
False
>>>
您可以使用条件表达式或类似的方式来实现您想要的功能:
print len(a) if isinstance(a, collections.Iterable) else 1
print len(a) if isinstance(a, collections.Sized) else 1
要查看collections
模块中所有可用的抽象基类的完整列表,请参见Python文档中的Collections Abstract Base Classes。
TypeError
异常。但是,你是如何陷入首先需要这样混合类型的情况的呢? - Martijn Pietersnumpy
、mpmath
或单个数字引起的。因此,它可以是有限的类型集(当然),但仍然很好不列出每种情况下会发生什么。 - evan54