Wenn Sie die Antworten von @jamylak und @ jpaddison3 miteinander kombinieren, sollten Sie verwenden, wenn Sie gegenüber numpy-Arrays als Eingabe robust sein und diese wie Listen behandeln möchten
import numpy as np
isinstance(P, (list, tuple, np.ndarray))
Dies ist robust gegenüber Unterklassen von Listen-, Tupel- und Numpy-Arrays.
Und wenn Sie auch gegenüber allen anderen Sequenzunterklassen (nicht nur Liste und Tupel) robust sein möchten, verwenden Sie
import collections
import numpy as np
isinstance(P, (collections.Sequence, np.ndarray))
Warum sollten Sie die Dinge so machen isinstanceund nicht type(P)mit einem Zielwert vergleichen ? Hier ist ein Beispiel, in dem wir das Verhalten NewListeiner trivialen Unterklasse von Listen erstellen und untersuchen .
>>> class NewList(list):
... isThisAList = '???'
...
>>> x = NewList([0,1])
>>> y = list([0,1])
>>> print x
[0, 1]
>>> print y
[0, 1]
>>> x==y
True
>>> type(x)
<class '__main__.NewList'>
>>> type(x) is list
False
>>> type(y) is list
True
>>> type(x).__name__
'NewList'
>>> isinstance(x, list)
True
Trotz xund yVergleich als gleich typewürde der Umgang mit ihnen zu unterschiedlichem Verhalten führen. Da jedoch xeine Instanz einer Unterklasse list, mit isinstance(x,list)dem gewünschten Verhalten und behandelt ergibt xund yauf die gleiche Weise.
type?