首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在python中通过列表中的成员查找对象

在python中通过列表中的成员查找对象
EN

Stack Overflow用户
提问于 2012-06-02 07:36:09
回答 3查看 39.2K关注 0票数 22

让我们假设以下简单的对象:

代码语言:javascript
复制
class Mock:
    def __init__(self, name, age):
        self.name = name
        self.age = age

然后我有一个包含一些对象的列表,如下所示:

代码语言:javascript
复制
myList = [Mock("Dan", 34), Mock("Jack", 30), Mock("Oli", 23)...]

有没有一些内置的功能,我可以得到所有的Mock与一个年龄为ie 30?当然,我可以遍历它们并比较它们的年龄,但如下所示

代码语言:javascript
复制
find(myList, age=30)

那就好了。有没有类似的东西?

EN

回答 3

Stack Overflow用户

发布于 2012-06-02 07:39:22

你可以试试filter()

代码语言:javascript
复制
filter(lambda x: x.age == 30, myList)

这将返回一个列表,其中只包含那些满足lambda表达式的对象。

票数 35
EN

Stack Overflow用户

发布于 2012-06-02 07:40:31

列表理解可以获取以下内容:

代码语言:javascript
复制
new_list = [x for x in myList if x.age == 30]
票数 21
EN

Stack Overflow用户

发布于 2012-06-02 08:50:52

列表理解几乎总是做这些事情的更快的方法(这里快2倍),尽管如前所述,如果你关心速度,索引甚至更快。

代码语言:javascript
复制
~$ python -mtimeit -s"from mock import myList" "filter(lambda x: x.age==21, myList)"
1000000 loops, best of 3: 1.34 usec per loop
~$ python -mtimeit -s"from mock import myList" "[x for x in myList if x.age==21]"
1000000 loops, best of 3: 0.63 usec per loop

对于当前目录中的文件mock.py

代码语言:javascript
复制
class Mock:
    def __init__(self, name, age):
        self.name = name
        self.age = age

myList = [Mock('Tom', 20), Mock('Dick', 21), Mock('Harry', 21), Mock('John', 22)]
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10858575

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档