视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
Python同时对数据做转换和换算的方法介绍与分析(附实例)
2020-11-27 14:20:35 责编:小采
文档


本篇文章给大家带来的内容是关于Python同时对数据做转换和换算的方法介绍与分析(附实例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

1、需求

我们需要调用一个换算函数(例如sum()、min()、max()),但首先得对数据做转换或者筛选

2、解决方案

有一种非常优雅地方案能够将数据换算和转换结合在一起:在函数参数中使用生成器表达式。

实例1:计算平方和:

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

结果:

14

实例2:判断指定目录是否存在.py文件

import os
filename=os.path.dirname(os.path.abspath(__file__))
files1=os.listdir(filename+"/image")
files2=os.listdir(filename)
#any表示该iterable只要存在一个满足条件的,欧返回True,否则才返回False
if any(name.endswith('.py') for name in files1):
 print('存在py文件')
else:
 print('不存在py文件')
#any表示该iterable只要存在一个满足条件的,欧返回True,否则才返回False
if any(name.endswith('.py') for name in files2):
 print('存在py文件')
else:
 print('不存在py文件')

运行结果:

不存在py文件
存在py文件

实例3:根据字典某个key取最小值

marks=[
 {'age':18,'money':100},
 {'age':19,'money':500},
 {'age':17,'money':900},
 {'age':20,'money':1000},
]
min_mark=min(m['age'] for m in marks)
print(min_mark)

结果:

17

3、分析

这种解决方案展示了当把生成器表达式作为函数的单独参数时在语法上的一些微妙之处(即:不必重复使用符号)。例如下面两行代码表示的是同一个意思:

s=sum((x*x for x in nums))
s=sum(x*x for x in nums)

比起首先创建一个临时例表,使用生成器做参数通常是更为高效和优雅地方式。例如,如果不使用生成器表达式,可以考虑下面方法来计算平法和:

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

这也能工作,但这引入了一个额外的步骤并且创建了额外的列表。对于小的一个列表。是无关紧要,但是如果nums非常巨大,那么就会创建一个庞大的临时数据结构,而且只用一次就被丢弃。

基于生成器的解决方案可以以迭代的方式转换数据,因此在内存使用上要高效得多。

某些特定的换算函数比如:min()和max()都可以接受一个key参数,当可能倾向于使用生成器时会很有帮助。例如在上面实例【根据字典某个key取最小值】时可以考虑下面的替代方案:

min_mark=min(marks,key=lambda m:m['age'])

下载本文
显示全文
专题