การรวมคำตอบของ @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)
กับมูลค่าเป้าหมาย นี่คือตัวอย่างที่เราทำและศึกษาพฤติกรรมของNewList
subclass เล็กน้อยของรายการ
>>> 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
หรือยัง