Python中C#的.Select相当于什么?
我在Python里有一个对象列表,每个对象都有一个叫做id
的属性。我想要提取出这些ID组成一个新的列表。
在C#中我会这样写:
myObjects.Select(obj => obj.id);
那我在Python里该怎么做呢?
5 个回答
7
如果你有一个很大的列表,而且只需要处理这些ID一次,那么可以使用生成器表达式。
ids = (obj.id for obj in my_objects)
for id in ids:
do_something(id)
生成器表达式不支持随机访问,但它会根据需要逐个提供ID,这样就避免了一次性创建整个列表。生成器表达式就像是 xrange
,而列表推导式则像是 range
。
还有一点需要注意的是,生成器表达式只能在它里面的资源仍然打开的情况下访问。例如,下面的代码会失败。
with open(filename) as f:
lines = (line for line in f)
# f is now closed
for line in lines:
print line
而相应的列表推导式在这种情况下是可以正常工作的。
21
可以看看这里关于“列表推导”的部分:http://docs.python.org/tutorial/datastructures.html
如果你原来的列表叫做 original_list
,而你想要的新列表叫做 id_list
,你可以这样做:
id_list = [x.id for x in original_list]
15
[obj.id for obj in myObjects]
当然可以!请把你想要翻译的内容发给我,我会帮你用简单易懂的语言解释清楚。