Python,过滤对象列表,但返回特定属性?

zhu*_*yxn 4 python map filter python-itertools

假设我有一个Person对象列表,它有age和room_number属性,我写了一个check()函数,如果person.age()和person.room_number()是满意的,则返回True,否则返回False.

filter(check, list_of_people_objects) 将返回满足条件的Person对象列表 check()

但是,我的问题是,是否有一种方法可以返回每个已批准人员的房间号码列表,而无需重复列表两次,如此不使用列表理解?所以过滤,但返回一个更具体的iterable属性.

map(lambda x: x.room_number(), filter(check, list_of_people_objects))

Ign*_*ams 12

实际上有两种方式.

  1. itertools

    map(..., itertools.ifilter(..))
    
    Run Code Online (Sandbox Code Playgroud)
  2. 列表理解

    [x.room_number() for x in people if check(x)]
    
    Run Code Online (Sandbox Code Playgroud)

您选择的主要是品味问题,但会议倾向于后者.