当前位置: 首页 > news >正文

Python推导式和生成器表达式

Python推导式

Python推导式是一种可以从一个数据序列构建另一个新的数据序列的结构体。

除了列表推导式 (list comprehension) 以外,还有字典(dict)、集合(set)推导式。它们的语法格式如下:

# 列表:使用方括号
[expression for item in iterable if condition]# 字典:使用花括号 `{}` 和提供键值对
{ key_expr: value_expr for value in collection if condition }#集合:使用花括号 `{}`,但只包含单个表达式
{ expression for item in Sequence if conditional }

示例如下:

squares = [x**2 for x in range(10) if x % 2 == 0]
print(squares)
# 结果: [0, 4, 16, 36, 64]squares_dict = {x: x**2 for x in range(10) if x % 2 == 0}
print(squares_dict)
# 结果: {0: 0, 2: 4, 4: 16, 6: 36, 8: 64}squares_set = {x**2 for x in range(10) if x % 2 == 0}
print(squares_set)
# 结果: {0, 64, 4, 36, 16}

生成器表达式

生成器表达式(generator expression) 与列表推导式类似,但它会返回一个生成器对象。生成器对象是惰性求值的,只有在迭代时才会计算出每一个值,节省内存。

语法为:

(expression for item in iterable if condition)

注意:生成器表达式使用的是圆括号。

由于语法结构类似,有些地方会把生成器表达式称为“元组推导式”,或者把两者混为一谈。通常,所谓的“元组推导式”实际上是指生成器表达式。

如果按照Python推导式的定义,”元组推导式“应该返回一个元组,但实际输出结果是一个生成器对象。

示例:

squares_gen = (x**2 for x in range(10) if x % 2 == 0)
print(squares_gen)
# 结果: <generator object <genexpr> at 0x7d1915779770>

在上述示例中,生成器表达式返回一个生成器对象,而不是元组。

元组构造器:

如果想要生成元组,而不是生成器对象,可以结合生成器表达式和tuple()构造函数:

squares_tuple = tuple(x**2 for x in range(10) if x % 2 == 0)
# 结果: (0, 4, 16, 36, 64)

总结来说,生成器表达式用于惰性求值和节省内存,而“元组推导式”并不存在,生成元组需结合生成器表达式与tuple()函数

小结

# 列表推导式
list_comprehension = [expression for item in iterable if condition]# 字典推导式
dict_comprehension = {key_expr: value_expr for item in iterable if condition}# 集合推导式
set_comprehension = {expression for item in iterable if condition}# 生成器表达式
generator_expression = (expression for item in iterable if condition)# 生成元组
tuple_from_generator = tuple(expression for item in iterable if condition)

相关文章:

Python推导式和生成器表达式

Python推导式 Python推导式是一种可以从一个数据序列构建另一个新的数据序列的结构体。 除了列表推导式 (list comprehension) 以外&#xff0c;还有字典(dict)、集合(set)推导式。它们的语法格式如下&#xff1a; # 列表&#xff1a;使用方括号 [expression for item in it…...

比较支持向量机、AdaBoost、逻辑斯谛回归模型的学习策略与算法

(1)支持向量机&#xff1a;SVM 是一种监督学习算法&#xff0c;用于分类和回归任务。 学习策略&#xff1a;间隔最大化 算法&#xff1a;最大间隔法、软间隔算法。 参数学习&#xff1a;参数学习过程是要最小化目标函数&#xff0c;通常通过优化算法&#xff08;如SMO&#x…...

Android顶部标题栏自定义,添加按钮

1. 先写一个标题栏的layout, 放在工程的res/layout下&#xff0c;如下: <?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_par…...

Spring Boot 整合 Dubbo3 + Nacos 2.4.0【进阶】+ 踩坑记录

上一篇文章中&#xff0c;Spring Boot 整合 Dubbo3 Nacos 2.4.0 进行了简单的集成使用&#xff0c;此文简单进阶并记录踩坑日常&#xff1b; Nacos 2.4.0 增加鉴权的配置Nacos 2.4.0 配置 MySQLNacos2.4.0 的热更新Dubbo3 自动负载Dubbo3 的重试和超时机制踩坑记录 一、Nacos…...

浙江省食品安全管理员题库及答案

1、《中华人民国食品安全法》从&#xff08;C&#xff09;起施行。 A.2009年1月1日 B.2009年5月1日 C.2009年6月1日 D.2009年10月1日 2、《中华人民国食品安全法》包括 &#xff08;D&#xff09;. A.九章共一百零一条 B.十章共一百零一条 C.九章共一百零四条 D.十章共一百零…...

C++ 几何算法 - 求两条直线交点

一:算法介绍 1. 首先定义两条直线方程: 2. 解方程,求出x, y坐标 3. 如果x分母的行列式等于0, 说明两条直线平行或方向相反 4. 如果x,y分母的行列式都等于0,说明两条线重叠 二:代码实现: #include <cmath> #include <iostream>class Point2D { public:doubl…...

Linux操作系统简介

今天给伙伴们分享一下Linux 操作系统简介&#xff0c;希望看了有所收获。 我是公众号「想吃西红柿」「云原生运维实战派」作者&#xff0c;对云原生运维感兴趣&#xff0c;也保持时刻学习&#xff0c;后续会分享工作中用到的运维技术&#xff0c;在运维的路上得到支持和共同进步…...

【Python机器学习】回归——缩减系数来“理解”数据

如果数据特征比样本点还多&#xff0c;是不可以使用线性回归的&#xff0c;因为在计算的时候会出错。 如果特征比样本点还多&#xff08;n>m&#xff09;&#xff0c;也就是说输入数据的矩阵x不是满秩矩阵。非满秩矩阵在求逆时会出问题。 为了解决上述问题&#xff0c;可以…...

组件设计原则

state数据结构设计 用数据描述所有内容数据要结构化&#xff0c;易于程序操作&#xff08;遍历、查找&#xff09;数据要可扩展&#xff0c;以便增加新的功能 组件设计组件通讯 从功能上拆分层次尽量让组件原子化容器组件&#xff08;只管理数据&#xff09;& UI组件&am…...

简单搭建vue项目

1.先安装node.js和vite&#xff0c;具体参考&#xff1a; 2.管理员身份运行cmd&#xff0c;跳转到node安装目录&#xff1a; 输入&#xff1a; npm create vitelatest 输入项目名称&#xff0c;选择vue和JavaScript 2.VisualStudioCode打开(可能需要管理员权限)创建的文件夹,点…...

ctfhub Bypass disable_function

LD_PRELOAD url 蚁剑连接 选择插件 点击开始 查看到此文件名编辑连接拼接到url后面重新连接 点击开启终端 在终端执行命令 ls / /readfile ShellShock url CTFHub 环境实例 | 提示信息 蚁剑连接 写入shell.php <?phpeval($_REQUEST[ant]);putenv("PHP_test() { :…...

【Qt】探索Qt网络编程:构建高效通信应用

文章目录 前言&#xff1a;1. Qt 网络编程介绍1.1 什么是网络编程&#xff1f;1.2 Qt的模块 2. UDP Socket2.1 核心 API 概述2.2 写一个带有界面的 Udp 回显服务器2.3 写一个带有界面的 Udp 客户端 3. TCP Socket3.1 核心 API 概述3.2 代码&#xff1a; 4. HTTP Client4.1 核心…...

【Android Studio】原生应用部署第三方插件(探针)

一、本地引入包流程 &#xff08;一&#xff09;本地引入包内容 &#xff08;二&#xff09;本地引入包操作步骤 将 【probe-android-sdk】目录里面所有的aar包复制到嵌码项目工程&#xff08;App级别&#xff09;的 libs 目录下 二、添加插件 &#xff08;一&#xff09;…...

嵌入式学习之路 15(C语言基础学习——指针操作一维字符型数组)

字符型数组的定义和初始化 char s[] "hello";&#xff1a;在栈上开辟空间并初始化。const char *p "hello";&#xff1a;指针 p 指向字符串常量区的 "hello"&#xff0c;只能读取不能修改。 指针变量的类型确定 指针变量的类型由其所指向的数据…...

C++ STL专题 list的底层实现

目录 1.模拟实现list 2.节点模板讲解 3.迭代器模板讲解 3.1为什么template 有三个类型参数 (1).class T (2).class ref (3).class ptr 3.2 *重载 3.3 ->重载 3.4 前置和后置的重载 3.5 前置--和--后置的重载 3.6 和!的重载 4. list模板讲解 4.1 begin()函数 …...

【JavaEE】线程池

目录 前言 什么是线程池 线程池的优点 ThreadPollExecutor中的构造方法 corePoolSize && maximumPoolSize keepAliveTime && unit workQueue threadFactory 如何在java中使用线程池 1.创建线程池对象 2.调用submit添加任务 3.调用shutdown关闭线程池…...

lvs实战项目-dr模式实现

一、环境准备 主机名IP地址router eth0&#xff1a;172.25.254.100 eth1&#xff1a;192.168.0.100 clienteth0&#xff1a;172.25.254.200lvseth1&#xff1a;192.168.0.50web1web2 1、client配置 [rootclient ~]# cat /etc/NetworkManager/system-connections/eth0.nmconne…...

JSONP跨域

1 概述 定义 json存在的意义&#xff1a; 不同类型的语言&#xff0c;都能识别json JSONP(JSON with Padding)是JSON的一种“使用模式”&#xff0c;可用于解决主流浏览器的跨域数据访问的问题。由于同源策略&#xff0c;一般来说位于 server1.example.com 的网页无法与不是 s…...

Linux--shell脚本语言—/—终章

一、shell函数 1、shell函数定义格式 参数说明&#xff1a; 1、可以带function fun() 定义&#xff0c;也可以直接fun() 定义,不带任何参数。 2、参数返回&#xff0c;可以显示加&#xff1a;return 返回&#xff0c;如果不加&#xff0c;将以最后一条命令运行结果&#xff…...

免费代理池是什么,如何使用代理IP进行网络爬虫?

互联网是一个庞大的数据集合体&#xff0c;网络信息资源丰富且繁杂&#xff0c;想要从中找到自己需要的信息要花费较多的时间。为了解决这个问题&#xff0c;网络爬虫技术应运而生&#xff0c;它的主要作用就是在海量的互联网信息中进行爬取&#xff0c;抓取有效信息并存储。然…...

别再问哪个AI 最强了,把它们放进同一个考场就知道

这段时间&#xff0c;我越来越不想回答一个问题&#xff1a;“现在哪个 AI 最强&#xff1f;”不是因为这个问题不重要&#xff0c; 恰恰相反&#xff0c;是因为它太重要了&#xff0c;重要到一句话已经越来越回答不了。以前大家聊 AI&#xff0c;很像在追榜单。 今天这个登顶&…...

UE5对象池系统深度解析:如何基于Subsystem框架设计可扩展的Gameplay工具

UE5对象池系统深度解析&#xff1a;如何基于Subsystem框架设计可扩展的Gameplay工具 在快节奏的现代游戏开发中&#xff0c;性能优化始终是开发者面临的核心挑战之一。想象一下这样的场景&#xff1a;当玩家在射击游戏中连续发射数百发子弹&#xff0c;或者在开放世界游戏中频繁…...

数据安全守护:QQ空间历史说说备份工具全攻略

数据安全守护&#xff1a;QQ空间历史说说备份工具全攻略 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 在数字记忆日益珍贵的今天&#xff0c;QQ空间承载着无数人的青春回忆与生活印记…...

G-Helper终极指南:解锁华硕笔记本隐藏性能的5个秘密功能

G-Helper终极指南&#xff1a;解锁华硕笔记本隐藏性能的5个秘密功能 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Flow, TUF, Strix, …...

艺术二维码生成工具实战指南:从技术实现到商业价值挖掘

艺术二维码生成工具实战指南&#xff1a;从技术实现到商业价值挖掘 【免费下载链接】control_v1p_sd15_qrcode_monster 项目地址: https://ai.gitcode.com/hf_mirrors/monster-labs/control_v1p_sd15_qrcode_monster 核心要点 解决传统二维码设计与功能性矛盾的完整技…...

深耕作物模型底层逻辑!DSSAT物候算法、光合物质分配与土壤碳氮循环机制深度解析

在精准农业与智慧育种快速发展的当下&#xff0c;深入解析作物生长发育机理、实现产量与环境的精准模拟&#xff0c;已成为农学科研与农业管理决策的核心需求。DSSAT模型作为全球应用最广泛的作物生长模拟系统&#xff0c;凭借其涵盖27种主要作物的完备模块体系与成熟的算法架构…...

C语言:数组详解

C语言&#xff1a;数组详解一.数组的基本概念1.基本概念2.主要特性3.基本操作二.数组的创建、初始化与类型1.一维数组的创建2.一维数组的初始化3.数组的类型4.一维数组的常见操作一维数组下标一维数组元素的打印一维数组的输入与输出5.一维数组的内存结构三.多维数组1.基本概念…...

Tsuru日志聚合性能优化:10个提升吞吐量与降低延迟的终极技巧

Tsuru日志聚合性能优化&#xff1a;10个提升吞吐量与降低延迟的终极技巧 【免费下载链接】tsuru Open source and extensible Platform as a Service (PaaS). 项目地址: https://gitcode.com/gh_mirrors/ts/tsuru Tsuru作为开源且可扩展的Platform as a Service (PaaS)平…...

如何实现重组抗体的精准定制?

一、重组抗体定制与传统抗体制备有何本质区别&#xff1f;重组抗体定制是通过基因工程技术在体外构建并表达目标抗体的创新方法。与传统杂交瘤技术相比&#xff0c;重组抗体技术具有多方面的显著优势。首先&#xff0c;其生产完全不依赖于动物免疫系统&#xff0c;而是通过人工…...

从67到89:我是如何用YOLO-MASK清洗COCO羊数据集提升模型精度的

从67到89&#xff1a;YOLO-MASK数据清洗实战与COCO羊数据集优化全记录 去年夏天&#xff0c;当我第一次在COCO羊数据集上训练YOLOv5模型时&#xff0c;那些徘徊在67%左右的mAP数值就像炎热的天气一样令人烦躁。作为一个长期从事计算机视觉项目的工程师&#xff0c;我深知数据质…...