引数 を取る関数があります。この関数をスカラーまたは配列NBins
で呼び出したいのですが、関数内で の長さを識別するにはどうすればよいですか? 言い換えると、スカラーかベクトルかを識別するにはどうすればよいでしょうか?50
[0, 10, 20, 30]
NBins
私はこれを試しました:
>>> N=[2,3,5]
>>> P = 5
>>> len(N)
3
>>> len(P)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: object of type 'int' has no len()
>>>
ご覧のとおり、は配列ではないため、len
に適用することはできません.... Python にはや のようなものがありますか?P
isarray
isscalar
ありがとう
ベストアンサー1
>>> import collections.abc
>>> isinstance([0, 10, 20, 30], collections.abc.Sequence) and not isinstance([0, 10, 20, 30], (str, unicode))
True
>>> isinstance(50, collections.abc.Sequence) and not isinstance(50, (str, unicode))
False
注:isinstance
クラスのタプルもサポートしていますが、チェックはtype(x) in (..., ...)
避ける必要があり、不要です。
チェックしてみるのもいいかもしれません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
その場合は、翻訳::
>>> hasattr(np.array([1, 2, 3]), "__len__")
True
>>> hasattr([1, 2, 3], "__len__")
True
>>> hasattr((1, 2, 3), "__len__")
True
しかし、前述のようにここ、これも完璧ではなく、辞書をシーケンスとして誤って分類します(少なくとも私によると)。一方、isinstance
ではcollections.abc.Sequence
正しく分類されます。
>>> 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(np.array([1, 2, 3]), (collections.abc.Sequence, np.ndarray))
True
>>> isinstance([1, 2, 3], (collections.abc.Sequence, np.ndarray))
True