如何从属性中找到列表中 class 实例的索引

How to find the index of a class instance in a list from the attribute

我有一个 class 的所有实例的列表。我试图在给定属性值的情况下找出该列表中实例的索引。

例如。我有以下代码:

class Test():
    all_objects=[]
    def __init__(self,name,age):
        self.name = name
        self.age = age
        Test.all_objects.append(self)

Test("joe",23)
Test("kate",16)
Test("adam",56)

#this is ugly .. 
for ind,item in enumerate(Test.all_objects):
    if item.name == 'joe':
        print(ind)

我可以通过遍历列表中的每个元素找到实例的索引。 有更好的方法吗?(也许以某种方式使用 index() 方法)

澄清:

我正在寻找一种无需遍历 all_objects 列表即可执行此操作的方法。看看下面的评论和答案,似乎没有办法解决这个问题。

感谢大家为我确认这一点。

使用函数式编程⬇

my_filter = filter(lambda x: x[1].name == 'joe', enumerate(Test.all_objects))
print(next(my_filter)[0])

一个班轮⬇

print(next(filter(lambda x: x[1].name == 'joe', enumerate(Test.all_objects)))[0])

一个班轮并在找不到指定实例时打印 Not Found

print(next(filter(lambda x: x[1].name == 'joe', enumerate(Test.all_objects)))[0], 'Not Found')

如果您想多次搜索,可以使用 name 及其关联对象创建字典:

objects = {i.name: i for i in Test.all_objects}

现在您可以通过名称访问对象:

a = objects['joe']

显然,如果有多个对象具有相同的对象,那是行不通的 name 您可以使用 defaultdict 来克服它:

from collections import defaultdict

objects = defaultdict(list)
for i in Test.all_objects:
    objects[i.name].append(i)

现在每个键都有一个对象列表。