从具有对象属性之一的对象列表中获取索引

时间:2017-11-01 14:35:54

标签: 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')中获取'Emp1'的索引。我试过这个:

print(employees.index(filter(lambda x: x.name == 'Emp1', employees)))

但他告诉我'ValueError:<过滤器对象在0xblabla>不在列表'中。我需要改变什么,或者有更好的选择来处理这个问题?

2 个答案:

答案 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'))
但是,效率低下。