Python中C#的.Select相当于什么?

15 投票
5 回答
5991 浏览
提问于 2025-04-16 07:31

我在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]

当然可以!请把你想要翻译的内容发给我,我会帮你用简单易懂的语言解释清楚。

撰写回答