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
实际上有两种方式.
map(..., itertools.ifilter(..))
Run Code Online (Sandbox Code Playgroud)列表理解
[x.room_number() for x in people if check(x)]
Run Code Online (Sandbox Code Playgroud)您选择的主要是品味问题,但会议倾向于后者.