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 isinstance
und nicht type(P)
mit einem Zielwert vergleichen ? Hier ist ein Beispiel, in dem wir das Verhalten NewList
einer 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 x
und y
Vergleich als gleich type
würde der Umgang mit ihnen zu unterschiedlichem Verhalten führen. Da jedoch x
eine Instanz einer Unterklasse list
, mit isinstance(x,list)
dem gewünschten Verhalten und behandelt ergibt x
und y
auf die gleiche Weise.
type
?