Python相当于C#的.Select?

mpe*_*pen 13 c# python linq enumerable

我在Python中有一个对象列表,每个对象都有一个id属性.我想获得这些ID的列表.

在C#我会写

myObjects.Select(obj => obj.id);
Run Code Online (Sandbox Code Playgroud)

我将如何在Python中执行此操作?

Bre*_*ode 19

在这里查看"列表理解"部分:http://docs.python.org/tutorial/datastructures.html

如果调用了您的起始列表并调用了original_list您的新列表,则id_list可以执行以下操作:

id_list = [x.id for x in original_list]
Run Code Online (Sandbox Code Playgroud)


Ign*_*ams 12

[obj.id for obj in myObjects]
Run Code Online (Sandbox Code Playgroud)


aar*_*ing 7

如果它是一个大的列表,你只需要处理一次id,那么也有生成器表达式.

ids = (obj.id for obj in my_objects)

for id in ids:
    do_something(id)
Run Code Online (Sandbox Code Playgroud)

生成器表达式不支持随机访问,但会根据需要为您提供每个ID,因此可以避免同时构建列表.生成器表达式xrange就像列表理解一样range.

生成器表达式的另一个警告是,只有当其中的任何资源仍处于打开状态时,才能访问它.例如,以下代码将失败.

with open(filename) as f:
    lines = (line for line in f)

# f is now closed
for line in lines:
    print line
Run Code Online (Sandbox Code Playgroud)

在这种情况下,等效列表理解将起作用.