【Python Cookbook】S01E16 同时对数据做转换和换算

目录

  • 问题
  • 解决方案
  • 讨论

问题

当换算(sum(), min(), max())同时遇到转换或筛选,怎么做?

解决方案

有一种非常优雅的方法,可以将数据换算和转换结合在一起——在函数参数中使用 生成器表达式

一个直观的案例:

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

还有一些其他的例子:

import os

files = os.listdir('dirname')
if any(name.endswith('.py') for name in files):
    print("There be python!")
else:
    print("Sorry, no python.")
s = ('ACME', 50, 123.45)
print(','.join(str(x) for x in s))
portfolio = [
    {'name': 'GOOG', 'shares': 50},
    {'name': 'YHOO', 'shares': 75},
    {'name': 'AOL', 'shares': 20},
    {'name': 'SCOX', 'shares': 65}
]

min_shares = min(s['shares'] for s in portfolio)
print(min_shares)

讨论

这种同时对数据做转换和换算的方案,解决了当把生成器作为函数的单独参数时在语法上的一些微妙之处,即,不必重复使用括号:

# 上下两行代码同意:
s = sum([x * x for x in nums])
s = sum(x * x for x in nums)

比起首先创建一个临时的列表,当然使用生成器做参数更为高效和优雅。

nums = [1, 2, 3, 4, 5]

print(sum([x * x for x in nums]))
print(sum(x * x for x in nums))

看似上述两个没差别,都能实现最终结果,但是细想,第一个方法引入了一个额外的列表。对于很小的 nums 可能无关紧要,但是如果 nums 数量非常大,那么就会创建一个庞大的临时数据结构,而且只用一次就丢弃。基于生成器的解决方案可以以迭代的方式转换数据,内存友好高效。

最后,我们可以完善我们的输出:

min_shares = min(s['shares'] for s in portfolio)
print(min_shares)
min_shares = min(portfolio, key=lambda s: s['shares'])
print(min_shares)

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/675839.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

YOLOv8+PyQt5海洋船只检测(可以重新训练,yolov8模型,从图像、视频和摄像头三种路径识别检测)

1.效果视频:海洋船只检测yoloV8检测(https://mbd.pub/o/bread/mbd-ZpaYk55r)_哔哩哔哩_bilibili资源包含可视化的海洋船只检测系统,可对于高空拍摄到的海洋图片进行轮船检测,基于最新的YOLOv8训练的海洋船只检测模型&a…

Facebook开户|FB10大提升视频广告效果实践

Facebook10大提升视频广告效果实践!!需要的家人们建议点赞收藏哦~ 一、在前3秒吸引注意力 在视频广告推广活动中,一直都有黄金3秒的说法,指的就是通过前三秒的制作,吸引观众的注意。吸引人的画面、个性的CTA、独特性和…

C语言| 字母金字塔

【思路分析:】 1 考虑左边的空格大写字母,而大写字母 先升序后降序输出 2 升序输出的字母的个数行数最大字母在26个英文字母中排的位置序号 3 降序输出的字母 升序输出的字母个数-1 编程顺序: 1 定义循环变量i,表示字母的顺序,循环变量j 表…

软件测试之黑盒测试与白盒测试知识小结

🍅 视频学习:文末有免费的配套视频可观看 🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 对于很多刚开始学习软件测试的小伙伴来说,如果能尽早将黑盒、白盒测试弄明白&#xf…

Makefile的入门学习

一、Makefile的入门学习 编译工具及构建工具介绍 在之前的课程,都是直接使用gcc对代码进行编译,这对简单的工程是可以的,但当我们遇到复杂的工程时,每次用gcc等编译工具去操作就会显得很低效。因此make工具就出现了,…

MYSQL之主从复制

一,安装MYSQL,两台 二,配置master服务器 vim /etc/my.cnf 在mysqld模块下加入 server-id133 #配置server-id,让主服务器有唯一ID号(让从服务器知道 他的主服务器是谁),建议使用ip最后3位 log-binmysql-bi…

coze扣子自定义插件开发

之前用过阿里云的,阿里云的插件填写的内容有点复杂 今天体验coze,没想到如此简单; 访问地址:扣子,注册对应账户,并创建对应空间; 第一步:点击插件,新建插件 选择不需要…

OpenHarmony嵌套类对象属性变化:@Observed装饰器和@ObjectLink装饰器

上文所述的装饰器仅能观察到第一层的变化,但是在实际应用开发中,应用会根据开发需要,封装自己的数据模型。对于多层嵌套的情况,比如二维数组,或者数组项class,或者class的属性是class,他们的第二…

代码随想录算法训练营第四十八天 | 70. 爬楼梯 (进阶)、322. 零钱兑换、279.完全平方数

70. 爬楼梯 (进阶) 代码随想录 解题思路 1.确定dp数组以及下标的含义 dp[i]:爬到有i个台阶的楼顶,有dp[i]种方法 2.递推公式 dp[j] dp[j - nums[i] ] 装满背包有多少种方法一般用这个 3.遍历顺序 完全背包,且…

Java面试——中间件

OpenFeign 1、openFeign是一个HTTP客户端,它融合了springmvc的注解,使之可以用REST风格的映射来请求转发。 2、可以把openFegin理解为是controller层或是service层。可以取代springmvc控制层作为请求映射,亦或是作为service层处理逻辑&#…

《网络安全技术 生成式人工智能服务安全基本要求》征求意见稿

1. 训练数据安全要求 (1)数据来源安全: 采集来源管理: 采集数据前应进行安全评估,含违法不良信息超过5%的数据源不得使用。 采集后需核验,含违法不良信息超过5%的数据不得用于训练。 不同来源训练数据搭…

kafka-集群-主题创建

文章目录 1、集群主题创建1.1、查看 efak1.2、创建 主题 my_topic1 并建立6个分区并给每个分区建立3个副本1.2.1、查看 my_topic1 的详细信息 1.3、停止 kafka-01实例,端口号为 9095 1、集群主题创建 1.1、查看 efak 已经有三个kafka实例 1.2、创建 主题 my_topic1…

C语言(数据存储)

Hi~!这里是奋斗的小羊,很荣幸各位能阅读我的文章,诚请评论指点,欢迎欢迎~~ 💥个人主页:小羊在奋斗 💥所属专栏:C语言 本系列文章为个人学习笔记,在这里撰写成文一…

windows上安装jdk1.8

这篇文章详细地介绍如何在windows上安装jdk1.8 目录 准备工作 第一步 第二步 第三步 第四步 第五步 最后的效果 查看JDK版本 准备工作 下载jdk:通过官网或者以下百度网盘链接下载jdk1.8 链接:https://pan.baidu.com/s/1zuMl0B-S6SDgiu1evw-IPQ?…

React useContext源码分析

React 框架中 useContext Hook 用于数据的传递,组件的数据传递有几种方式,通过 props、状态管理 和 useContext。本文将讲述useContext 在 React 是如何工作的,创建一个简单的 Context 例子并根据源码进行 Debug: 创建 context …

subline text3安装numpy,scipy,matplotlib,pandas,sklearn,ipynb

1,numpy(基础数值算法) 安装,要是在cmd直接安装到最后会报错, import numpy as np ModuleNotFoundError: No module named numpy 直接进入python环境,输入python -m pip install numpy就不会报错…

《科技与健康》是什么级别的期刊?是正规期刊吗?能评职称吗?

问题解答 问:《科技与健康》期刊万方网可查吗 答:万方、维普可查 问:《科技与健康》是正规期刊吗? 答:万方维普收录的正规期刊。主管单位:长江出版传媒股份有限公司 主办单位:湖北科学技术…

调用阿里云智能云实现垃圾分类

目录 1. 作者介绍2. API3. 阿里云API垃圾分类业务4. 实验过程4.1 接入阿里云4.2 创建并获取AccessKey ID和Secret4.3 登录阿里云官网,搜索垃圾分类技术文档4.4 配置环境变量4.5 代码部分 1. 作者介绍 孙作正,男,西安工程大学电子信息学院&am…

【计算机毕设】基于SpringBoot的图书进销存管理系统设计与实现 - 源码免费(私信领取)

免费领取源码 | 项目完整可运行 | v:chengn7890 诚招源码校园代理! 1. 研究目的 本研究旨在设计并实现一款基于SpringBoot的图书进销存管理系统,旨在解决图书馆或书店在图书采购、销售和库存管理等方面的问题&#xff…

扩散模型的技术原理和应用价值

引言 一、扩散模型的基本概念 扩散模型(Diffusion Models)是一种基于概率论的生成模型,最初源自物理学中的扩散过程理论,比如墨水在水中的扩散过程。在机器学习领域,这一概念被创造性地应用于数据生成任务,特别是图像和声音的合成…