>>> import collections.abc
>>> isinstance([0, 10, 20, 30], collections.abc.Sequence)
True
>>> isinstance(50, collections.abc.Sequence)
False
Hinweis: isinstance
unterstützt auch ein Tupel von Klassen, Überprüfen Sie type(x) in (..., ...)
sollte vermieden werden und ist unnötig.
Sie sollten auch überprüfen not isinstance(x, (str, unicode))
Wie von @2080 und auch hier angemerkt wurde, funktioniert dies nicht für numpy
Arrays. z. B.
>>> 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
In diesem Fall können Sie die Antwort von @jpaddison3 ausprobieren:
>>> hasattr(np.array([1, 2, 3]), "__len__")
True
>>> hasattr([1, 2, 3], "__len__")
True
>>> hasattr((1, 2, 3), "__len__")
True
Wie jedoch hier angemerkt wird, ist auch dies nicht perfekt und wird fälschlicherweise (zumindest nach meiner Meinung) Wörterbücher als Sequenzen klassifizieren, während isinstance
mit der Klasse collections.abc.Sequence
korrekt klassifiziert:
>>> 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
Sie könnten Ihre Lösung anpassen und etwas ähnliches tun, fügen Sie je nach Bedarf weitere Typen zu isinstance
hinzu:
>>> isinstance(np.array([1, 2, 3]), (collections.abc.Sequence, np.ndarray))
True
>>> isinstance([1, 2, 3], (collections.abc.Sequence, np.ndarray))
True