การรวมคำตอบของ @jamylak และ @ jpaddison3 เข้าด้วยกันหากคุณจำเป็นต้องมีความทนทานต่ออาร์เรย์ numpy เป็นอินพุตและจัดการในลักษณะเดียวกับรายการคุณควรใช้
import numpy as np
isinstance(P, (list, tuple, np.ndarray))
สิ่งนี้มีความแข็งแกร่งเมื่อเทียบกับ subclasses ของ list, tuple และ numpy arrays
และถ้าคุณต้องการที่จะทนทานต่อ subclasses อื่น ๆ ทั้งหมดของลำดับเช่นกัน (ไม่ใช่แค่ลิสต์และทูเปิล) ให้ใช้
import collections
import numpy as np
isinstance(P, (collections.Sequence, np.ndarray))
ทำไมคุณควรทำสิ่งต่าง ๆ ด้วยวิธีนี้isinstanceและไม่เปรียบเทียบtype(P)กับมูลค่าเป้าหมาย นี่คือตัวอย่างที่เราทำและศึกษาพฤติกรรมของNewListsubclass เล็กน้อยของรายการ
>>> 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
แม้จะมีxและyเปรียบเทียบเท่ากันการจัดการพวกเขาโดยtypeจะส่งผลให้พฤติกรรมที่แตกต่าง อย่างไรก็ตามเนื่องจากxเป็นตัวอย่างของคลาสย่อยของการlistใช้isinstance(x,list)ให้พฤติกรรมที่ต้องการและปฏิบัติxและyในลักษณะเดียวกัน
typeหรือยัง