簡體   English   中英

在列表中查找對象類型的實例

[英]Finding instance of Object type in list

我遇到類似以下代碼的情況。 我想找到對象A的第一個實例的索引。什么是最快的方法?

我知道有很多方法可以瀏覽整個列表並找到它,但是一旦找到第一個列表,有沒有辦法停止搜索?

class A():
    def __init__(self):
        self.a = 0
    def print(self):
        print(self.a)

l = [0, 0, A(), 0, A(), 0]
print(l.index(type(A))) # this does not work

您必須測試每個對象; 使用列表comprehension和enumerate()獲取所有匹配的索引:

[i for i, ob in enumerate(l) if isinstance(ob, A)]

或要獲取第一個索引,請使用next()和生成器表達式:

next((i for i, ob in enumerate(l) if isinstance(ob, A)), None)

演示:

>>> [i for i, ob in enumerate(l) if isinstance(ob, A)]
[2, 4]
>>> next((i for i, ob in enumerate(l) if isinstance(ob, A)), None)
2
class A():
    def __init__(self):
        self.a = 0
    def __eq__(self,other): #this overrides the equality check
        if isinstance(other,A):
           return self.a==other.a
    def print(self):
        print(self.a)

l = [0, 0, A(), 0, A(), 0]
print(l.index(A()))#now this should work
print A() in l

a1 = A()
a2 = A()
a1 == a2 #True
a1.a = 2
a1 == a2 #False
a2.a = 2
a1 == a2 #True
a2.a = 5
a1 < a2 #Error we would need to overload __cmp__ or __lt__ methods for this to work

最明顯的方法:

for index, value in enumerate(l):
    if isinstance(value,A):
        return (index, value)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM