将包含对象的列表转换为包含这些对象的特定函数或属性的列表

时间:2014-06-06 13:16:12

标签: python list python-2.7

鉴于:

obj_list = [obj0, obj1, obj2, obj3...]

我想:

names_list = [obj0.name(), obj1.name(), obj2.name(), obj3.name()...]
paths_list = [obj0.path(), obj1.path(), obj2.path(), obj3.path()...]

因此,出于调试目的,我可以这样做:

print names_list

if my_path not in paths_list ...

当然我可以做到

name_list =[]
path_list = []
for obj in obj_list:
    name_list.append(obj.name())
    path_list.append(obj.path())

但是我不妨在C中写这个。当然有一种python方式在一个小命令中执行此操作,但我找不到它。

我正在使用python 2.7

3 个答案:

答案 0 :(得分:7)

听起来像是list comprehensions的工作。

names_list = [obj.name() for obj in obj_list]

答案 1 :(得分:4)

在Python中执行此操作的(语法上)简单方法是使用map()

names_list = map(lambda x: x.name(), obj_list)

答案 2 :(得分:4)

您可以使用operator.methodcaller,就像这样

from operator import methodcaller
get_name, get_path = methodcaller("name"), methodcaller("path")
names, paths = map(get_name, obj_list), map(get_path, obj_list)