Python 从包含以下对象之一的对象列表中获取索引';s属性
我有一个对象列表,我试图从我拥有的对象属性(例如名称)中获取该列表中一个对象的索引。类似于下面的示例:Python 从包含以下对象之一的对象列表中获取索引';s属性,python,oop,arraylist,Python,Oop,Arraylist,我有一个对象列表,我试图从我拥有的对象属性(例如名称)中获取该列表中一个对象的索引。类似于下面的示例: class Employee: def __init__(self, name): self.name = name def add_emp(name): employees.append(Employee(name)) employees = [] add_emp('Emp1') 现在,我正在尝试获取self.employees列表(此处为“0”)中的“
class Employee:
def __init__(self, name):
self.name = name
def add_emp(name):
employees.append(Employee(name))
employees = []
add_emp('Emp1')
现在,我正在尝试获取self.employees列表(此处为“0”)中的“Emp1”索引。我在这里试过:
print(employees.index(filter(lambda x: x.name == 'Emp1', employees)))
但他告诉我“ValueError:print(employees.index(list(filter(lambda x: x.name == 'Emp1', employees))[0]))
但是,最好的方法是使用:
输出:
>>> get_employee_index('Emp1')
0
嗯,不要搜索过滤器本身,而是搜索过滤器找到的内容。例如,
next(filter(…)
而不是filter(…)
但最好使用枚举
:
print(next(i for i, x in enumerate(employees) if x.name == 'Emp1'))
或者,您可以创建一个名称列表,并要求其提供索引:
print([x.name for x in employees].index('Emp1'))
但是效率较低。您可以使用
enumerate
函数,它返回一个元组迭代器,格式为i,o
,其中i
是索引,o
是实际对象。@hkzl您必须使用过滤器对其进行迭代第一种方法,实际上对我不起作用,因为他抱怨列表索引超出范围。然而,第二种选择,你和其他人都认为是更好的选择,效果非常好。谢谢!你和@ettanany的答案都很好,但这一行的答案很好,所以我认为这是公认的答案。谢谢大家!
print([x.name for x in employees].index('Emp1'))