5.3 Python高级特性之-列表生成式、生成器、迭代器

news2024/9/24 5:23:36

一、 列表生成式

是Python内置的非常简单却强大的可以用来创建list的生成式
具体可根据如下案例理解,且代码也是可用的
""" 1、 生成[0,1,2,3,4,5,6]这样列表 """
print(list(range(0, 7)))
""" 2、 生成[0,1,4,9,16,25]的列表, 即:0*0,1*1,2*2.....5*5 """
# 1) 基本方法-繁琐方法
list1 = list()
for one in range(0, 6):
    list1.append(one * one)
# 2) 列表表达式-简化方式
list1 = [one * one for one in range(0, 6)]
print(list1)
"""3、【if判断】获取1到20之间的属于偶数的正整数"""
list2 = [x for x in range(1, 21) if x % 2 == 0]
print(list2)
"""4、【双for循环】遍历两列表,并逐一组合条件"""
M, N = ["A1", "B1", "C1"], ["M", "N", "C1"]
list3 = [f"{m}+{n}" for m in M for n in N if m != n]  
list4 = [f"{m}+{n}" if m != n else m for m in M for n in N]  # 如果有else条件, if 和else逻辑均在for前
print(list3)
print(list4)
"""5、【遍历dict】提取用户信息,并列表存储,元素=  属性=属性值"""
student1 = {"name": "Lujier", "sex": "Female", "height": 1.65, "hair": "long"}
stu_info_list = [f"{stu_key}={stu_value}" for stu_key, stu_value in student1.items()]
print(stu_info_list)

在这里插入图片描述

二、 生成器

   通过学习列表表达式, 我们能够快速创建列表,但是:列表容量是有限的, 如果想要创建大数量的列表,会占用很大的内存空间,,但有时候我们并不是所
 有元素都会去访问,相当于可能会浪费空间。 故而便有了“生成器”
(generator)这样的概念, 可以在循环的过程中不断推算出后续的元素,这样
就无需直接创建完整的list,就节省了大量空间, 至于如何创建生成器&生成器
元素访问, 可根据下方截图案例自行尝试。
[关键字] 惰性计算的序列、next()
# 1、 基本内容
L = [x * x for x in range(5)]
# print(L)
g = (x * x for x in range(5))
print(g)
# 通过next()函数获得generator的下一个返回值
print(next(g))
print(next(g))
print(next(g))
print(next(g))
print(next(g))
# 无元素可访问,会报错StopIteration
print(next(g))

for one in g:
   print(one)
#2、 经典案例-斐波拉契
# [普通实现]斐波拉契数列用列表生成式-前n个数
def fibonacci_sequence(num):
    n, current_before, current = 1, 0, 1
    while n < num + 1:
        print(current)
        n, current_before, current = n + 1, current, current_before + current

# [生成器]斐波拉契数列
def fib(num):
    n, current_before, current = 1, 0, 1
    while n < num + 1:
        yield current
        n, current_before, current = n + 1, current, current_before + current

fibonacci_sequence(7)
print(fib(7))
mm = fib(7)
print(next(mm))
print(next(mm))

在这里插入图片描述

# 3、经典案例3-杨辉三角
def triangles(top_num):
    n, before, current = 2, [1], [1, 1]
    while n < top_num + 1:
        yield before
        n, before = n + 1, current
        current = [1] + [current[index] + current[index + 

在这里插入图片描述

三、 迭代器

基础理解:
一、 可被for循环的数据类型有:
   1、 【基础数据类型】 list、tuple、str、dict、set
   2、   generator: 包含生成器和生成器函数(yield)

二、 可迭代对象(Iterable)概念
   可以直接用for循环的对象统称为可迭代对象
   可以用isinstance()判断是否是可迭代对象,具体如下:
  
      from collections.abc import Iterable
      aaa = triangles(7)
       print(isinstance(aaa, Iterable)) # 结果返回true
  
三、 迭代器(Iterator)概念:
     迭代器:  可以被next()函数调用并不断返回下一个值的对象称为迭代器
     生成器:  可以作用于for循环,还可以next返回下一个值,直到越界抛出StopIteration

 四、生成器、迭代器区别
  生成器都是:迭代器
  可迭代对象不一定是迭代器: 如: list、dict、str
  对于是可迭代对象的类型但又不是迭代器,那么其实是可以转化的: iter()函数
【注】 以上所有内容见如下代码案例:

1、 判断是否为迭代器

在这里插入图片描述

2、可迭代对象但非迭代器next()

在这里插入图片描述

3、 iter()函数转化为迭代器

在这里插入图片描述

4、 for 循环遍历–原理同next()

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MyBatis入门案列

MyBatis入门案列 开发Mybatis程序的步骤&#xff1a; 1、配置mybatis conf.xml: 配置数据库信息 和 需要加载的映射文件 &#xff12;、表 - 类 映射文件xxMapper.xml: 增删改查标签<select> &#xff13;、测试类: session.selectOne(“需要查询的SQL的namespace.id”…

jenkins 采用ssh方式连接gitlab连接不上

一、gitlab 添加jenkins服务器的公钥 jenkins 生成秘钥命令 ssh-keygen -t rsa2.jenkins 秘钥地址&#xff1a; cd /root/.ssh3.复制公钥 到gitlab 添加 cat id_rsa_pub4.添加私钥到jenkins cat id_rsa5.绑定&#xff08;顺利的话到这里就结束了&#xff09; &#xff0…

oc基本控件2

// // ViewController.m // OcDemoTest // // Created by Mac on 2023/7/14. //#import "ViewController.h"interface ViewController () // label property (weak, nonatomic) IBOutlet UIImageView *imageView; // Use of undeclared identifier // 全局propert…

基于Open3D的点云处理11-三维点云表面重建

点云表面重建 &#xff08;1&#xff09;显式建模方法&#xff1a; Explicit reconstruction 例如&#xff1a;Delaunay 三角网、Alpha shapes &#xff08;2&#xff09;隐式建模方法&#xff1a; Implicit reconstruction 例如&#xff1a;径向基函数法、移动最小二乘法、泊…

【QT】——Base64加解密

介绍 用 记事本 打开 exe、jpg、pdf 这些文件时&#xff0c;我们都会看到一大堆乱码&#xff0c;因为二进制文件包含很多无法显示和打印的字符。如果要让记事本这样的文本处理软件 能 处理二进制数据&#xff0c;如使用 json 保存二进制信息&#xff0c;需要先把数据先做一个 …

微服务 云原生:搭建 K8S 集群

为节约时间和成本&#xff0c;仅供学习使用&#xff0c;直接在两台虚拟机上模拟 K8S 集群搭建 踩坑之旅 系统环境&#xff1a;CentOS-7-x86_64-Minimal-2009 镜像&#xff0c;为方便起见&#xff0c;直接在 root 账户下操作&#xff0c;现实情况最好不要这样做。 基础准备 关…

数据在内存中的存储1(C语言进阶)

数据在内存中的存储 1.数据类型介绍1.1类型的基本归类&#xff1a;整形家族浮点数家族构造类型指针类型空类型 2.整形在内存中的存储2.1 原码、反码、补码2.2 大小端介绍为什么有大端和小端&#xff1a; 我们今天来学习数据在内存中的存储 1.数据类型介绍 前面我们已经学习了基…

TCP三次握手四次挥手

文章目录 TCP 三次握手和四次挥手1、三次握手过程image-202307100943094972、为什么要三次握手3、第 2 次握手传回了 ACK&#xff0c;为什么还要传回 SYN&#xff1f;4、断开连接-TCP 四次挥手5、为什么要四次挥手6、丢包问题7、为什么不能把服务器发送的 ACK 和 FIN 合并起来&…

qt开发技巧之嵌入式linux qt按钮点击触发两次

1.问题 移植qt5.12.9到嵌入式linux系统&#xff0c;tslib作为触摸输入&#xff0c;开发平台是imx6ull&#xff0c;点击pushbutton按钮会出现触发两次点击的情况。 2.解决 vi /etc/profile&#xff0c;在 /etc/profile里添加环境变量&#xff0c;禁止QT自带输入检测&#xff0…

vue-watch监听器

1. 概述 watch是 vue 中常用的监听器&#xff0c;它主要用于侦听数据的变化&#xff0c;在数据发生变化的时候执行一些操作。 Vue官网很明确的建议我们这样使用watch侦听属性&#xff1a;当需要在数据变化时执行异步或开销较大的操作时&#xff0c;这个方式是最有用的。 2. 用…

【通览一百个大模型】XLNet(Google)

XLNet 欢迎订阅阅读【大模型&NLP&算法】。 作者&#xff1a;王嘉宁本文章内容为转载或整理&#xff1b;仓库链接&#xff1a;https://github.com/wjn1996/LLMs-NLP-Algo 【通览一百个大模型】XLNet&#xff08;Google&#xff09; 作者&#xff1a;王嘉宁&#xff0…

lua脚本语言学习笔记

Lua 是一种轻量小巧的脚本语言&#xff0c;用标准C语言编写并以源代码形式开放&#xff0c; 其设计目的是为了嵌入应用程序中&#xff0c;从而为应用程序提供灵活的扩展和定制功能。 因为我们使用redis的时候一般要写lua脚本&#xff0c;这篇文章就介绍一下lua脚本语言的基础用…

Python 算法基础篇:时间复杂度和空间复杂度简介

Python 算法基础篇&#xff1a;时间复杂度和空间复杂度简介 引言 1. 时间复杂度 a ) 常见的时间复杂度 b ) 时间复杂度示例 2. 空间复杂度 a ) 常见的空间复杂度 b ) 空间复杂度示例 结论 引言 在学习和分析算法时&#xff0c;时间复杂度和空间复杂度是两个关键概念。它们帮助…

【Python】类型注解 ④ ( 函数类型注解 | 函数形参类型注解语法 | 函数返回值类型注解 )

文章目录 一、函数形参类型注解1、函数中由于类型缺省导致的提示问题2、函数形参类型注解语法3、代码示例 - 函数形参类型注解 二、函数返回值类型注解1、函数返回值类型注解语法2、代码示例 - 函数返回值类型注解 一、函数形参类型注解 1、函数中由于类型缺省导致的提示问题 由…

LSTM对比Bi-LSTM的电力负荷时间序列预测(Matlab)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

小程序api的promise化

小程序根目录cmd运行安装命令 npm install --save miniprogram-api-promise1.0.4 安装完成之后先到根目录中删除miniprogram_npm文件夹(不删除构建npm时可能会出现问题) 删除之后再在工具中点击构建npm 构建成功之后会看到根目录中重新出现了miniprogram_npm文件夹 在app.j…

P1747 好奇怪的游戏

好奇怪的游戏 题目背景 《爱与愁的故事第三弹shopping》娱乐章。 调调口味来道水题。 题目描述 爱与愁大神坐在公交车上无聊&#xff0c;于是玩起了手机。一款奇怪的游戏进入了爱与愁大神的眼帘&#xff1a;***&#xff08;游戏名被打上了马赛克&#xff09;。这个游戏类似…

修复漏洞(三)升级Docker里面的镜像(MySQL、Nginx等)

前言 因原版本检测出来存在漏洞&#xff0c;故需升级底层镜像 步骤 先看看自己现在的是什么版本&#xff0c;教你们一个骚操作&#xff0c;查看Docker里面的Mysql或者其他容器版本都不用百度出来的这么麻烦首先docker images&#xff0c;查看镜像ID然后docker inspect 镜像I…

2、Java入门教程【IDEA】

1、下载 IDEA社区版&#xff1a;下载地址 IDEA管理JAVA程序的结构&#xff1a; project 项目、工程module 模块package 包class 类 2、创建工程 创建【project】 点击【create】后&#xff0c;项目结构如下&#xff1a; 创建【package】 我们继续在【src】目录下创建【pack…

Python中的break和continue语句应用举例

Python中的break和continue语句应用举例 在进行Python编程时候&#xff0c;有时需要&#xff0c;对循环中断或跳过某部分语句&#xff0c;此时常会用到break语句或continue语句。本文将通过实际例子阐述这两个语句的用法。 1.break语句 break语句是实现在某个地方中断循环&a…