我有一个对象列表,我试图从我拥有的对象的属性(例如名称)中获取该列表中的一个对象的索引。类似于以下示例:
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:<过滤器对象在0xblabla>不在列表'中。我需要改变什么,或者有更好的选择来处理这个问题?
答案 0 :(得分:0)
因为filter()
返回一个过滤器对象,一种方法是将它转换为一个列表并获取索引为0的元素:
print(employees.index(list(filter(lambda x: x.name == 'Emp1', employees))[0]))
但是,最好的方法是使用enumerate()
:
def get_employee_index(name):
for i, e in enumerate(employees):
if e.name == name:
return i
return -1 # for not found employee
<强>输出:强>
>>> get_employee_index('Emp1')
0
答案 1 :(得分:0)
请勿搜索过滤器本身,搜索过滤器找到的内容。例如,next(filter(...))
代替filter(...)
。
但最好只使用enumerate
:
print(next(i for i, x in enumerate(employees) if x.name == 'Emp1'))
或者你可以创建一个名单列表并询问索引:
print([x.name for x in employees].index('Emp1'))
但是,效率低下。