2024-06-17 14:54:18 发布
网友
在Python中执行以下操作的最佳方法是什么:
for item in [ x.attr for x in some_list ]: do_something_with(item)
这可能是一个关键问题,但列表理解不是生成了一个我们不需要的新列表并占用内存吗?如果我们能做一个像迭代器一样的列表理解不是更好吗。在
是的(对你的两个问题)。在
通过使用括号而不是方括号,你可以为这个序列生成一个所谓的“生成器表达式”,这正是你所建议的。它允许您迭代序列,而无需分配一个列表来同时保存所有元素。在
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,没有合适的答案,所以这里有一个功能性的解决方案:
functional-programming
from operator import itemgetter map(do_something_with, map(itemgetter('attr'), some_list))
python3的map()使用迭代器,但是python2创建了一个列表。对于python2,使用itertools.imap()。在
map()
itertools.imap()
如果返回some_list,可以使用生成器表达式和延迟求值进一步简化它:
some_list
是的(对你的两个问题)。在
通过使用括号而不是方括号,你可以为这个序列生成一个所谓的“生成器表达式”,这正是你所建议的。它允许您迭代序列,而无需分配一个列表来同时保存所有元素。在
{a1}的详细信息记录在^表达式中。在
为什么不只是:
这个问题被标记为
functional-programming
,没有合适的答案,所以这里有一个功能性的解决方案:python3的
map()
使用迭代器,但是python2创建了一个列表。对于python2,使用itertools.imap()
。在如果返回
^{pr2}$some_list
,可以使用生成器表达式和延迟求值进一步简化它:相关问题 更多 >
编程相关推荐