python学习笔记:同时对数据做转换和换算

2020-02-18  本文已影响0人  潼潼夏

问题

如果需要调用一个换算函数(例如sum()、min()、max()),就需要首先对数据做转换和筛选。

解决方案

在函数参数中使用生成器表达式。
示例1:

nums = [1,2,3,4]
s = sum(x*x for x in nums)
print s
#s=30

示例2:

portfolio=[{'name':'goog','shares':50},{'name':'go','shares':90},{'name':'pp','shares':5},{'name':'gc','shares':23}]
min_shares = min(s['shares'] for s in portfolio)
print min_shares
#min_shares=5

如果不使用生成器做参数,可以考虑以下这种实现:

nums = [1,2,3,4]
s = sum([x*x  for x in nums])
#s=30

比起首先创建一个临时的列表,使用生成器做参数通常是更为高效和优雅的方式。对于引入一个这么小的临时列表,无关紧要,但是如果nums非常巨大,那么就会创建一个庞大的数据结构,而且只用一次就丢弃。
基于生成器的解决方案可以以迭代的方式转换数据,因此在内存使用上高效的多。

上一篇下一篇

猜你喜欢

热点阅读