Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从包含以下对象之一的对象列表中获取索引';s属性_Python_Oop_Arraylist - Fatal编程技术网

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:不在列表中”。我必须更改什么,或者是否有更好的选项来处理此问题?

因为返回一个筛选器对象,一种方法是将其转换为列表并获取索引为0的元素:

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'))