从python中的列表创建生成器表达式

2024-06-17 14:54:18 发布

您现在位置:Python中文网/ 问答频道 /正文

在Python中执行以下操作的最佳方法是什么:

for item in [ x.attr for x in some_list ]:
    do_something_with(item)

这可能是一个关键问题,但列表理解不是生成了一个我们不需要的新列表并占用内存吗?如果我们能做一个像迭代器一样的列表理解不是更好吗。在


Tags: 方法内存in列表forwithsomeitem
3条回答

是的(对你的两个问题)。在

通过使用括号而不是方括号,你可以为这个序列生成一个所谓的“生成器表达式”,这正是你所建议的。它允许您迭代序列,而无需分配一个列表来同时保存所有元素。在

for item in (x.attr for x in some_list):
    do_something_with(item)

{a1}的详细信息记录在^表达式中。在

为什么不只是:

for x in some_list:
    do_something_with(x.attr)

这个问题被标记为functional-programming,没有合适的答案,所以这里有一个功能性的解决方案:

from operator import itemgetter

map(do_something_with, map(itemgetter('attr'), some_list))

python3的map()使用迭代器,但是python2创建了一个列表。对于python2,使用itertools.imap()。在

如果返回some_list,可以使用生成器表达式和延迟求值进一步简化它:

^{pr2}$

相关问题 更多 >