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

一、 列表生成式

是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()

在这里插入图片描述

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

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

相关文章

【数据结构】树与二叉树(上)

目录 前言&#xff1a; 一、树&#xff1a; 1.树的概念&#xff1a; 2.树的相关概念&#xff1a; 3.树的表示&#xff1a; 4.书的实际使用场景&#xff1a; 二、二叉树&#xff1a; 1.二叉树的概念&#xff1a; 2.两种特殊二叉树&#xff1a; ①.满二叉树&#xff1a;…

在Vue种使用Vant框架

第一步&#xff1a;打开Vant框架地址 https://vant-contrib.gitee.io/vant/v2/#/zh-CN/home 第二步&#xff1a; 安装 第三步&#xff1a;引入&#xff08;我这里使用的是按需导入&#xff09; 执行命令&#xff1a; npm i babel-plugin-import -D ①&#xff1a;src下创建个…

Oracle解析JSON字符串

Oracle解析JSON字符串 假设某个字段存储的JSON字符串&#xff0c;我们不想查出来后通过一些常见的编程语言处理&#xff08;JSON.parse()或者是JSONObject.parseObject()等&#xff09;&#xff0c;想直接在数据库上处理&#xff0c;又该如何书写呢&#xff1f; 其实在ORACLE中…

小程序api的promise化

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

RNN LSTM

参考资料&#xff1a; 《机器学习2022》李宏毅史上最详细循环神经网络讲解&#xff08;RNN/LSTM/GRU&#xff09; - 知乎 (zhihu.com) LSTM如何来避免梯度弥散和梯度爆炸&#xff1f; - 知乎 (zhihu.com) 1 RNN 的结构 首先考虑这样一个 slot filling 问题&#xff1a; 注意…

(简单)剑指Offer 21. 调整数组顺序使奇数位于偶数前面 Java

记数组nums的长度为n。从先nums左侧开始遍历&#xff0c;如果遇到的是奇数&#xff0c;就表示这个元素已经调整完成&#xff0c;继续从左往右遍历&#xff0c;直到遇到一个偶数。然后从nums右侧开始遍历&#xff0c;如果遇到的是偶数&#xff0c;就表示这个元素已经调整完成了&…

[JVM] 1. 初步认识JVM

核心思想&#xff1a; “Write Once, Run anywhere”. 各种语言通过编译器转换成字节码文件&#xff0c;在JVM上运行。 一、Java虚拟机 Java虚拟机是一台执行Java字节码的虚拟计算机&#xff0c;它拥有独立的运行机制&#xff0c;其运行的Java字节码也未必由Java语言编译而成…

辅助驾驶功能开发-功能规范篇(27)-2-导航式巡航辅助NCA

书接上回 2.2.2.3规划控制模块 2.2.2.3.1.全局导航规划 当用户输入导航终点时&#xff0c;全局导航规划模块会根据高精地图的覆盖区域将全局导航路径分为ICA,NCA可用段。实现ICA/NCA功能的划分及自动升降级。 当自车未按照导航路径行驶时(如未使出指定匝道&#xff0c;路口未…

折叠屏手机的屏幕,华为Mate X3给出了一份“内外兼修”的解决方案

说起折叠屏手机&#xff0c;屏幕一直都是这个领域的重头戏&#xff0c;很多人都对折叠屏手机有一种刻板印象&#xff0c;那就是脆弱。但是&#xff0c;3月份华为最新推出的Mate X3可以说是非常的亮眼&#xff0c;在内外屏幕、水滴铰链、影像系统等多个核心部件的全方位提升&…

Python面向对象学习整理(一)

一、面向对象中的几点概念 1.1 什么是类&#xff1f; 类&#xff1a;用户定义的对象原型&#xff08;prototype&#xff09;&#xff0c;该原型定义了一组可描述该类任何对象的属性&#xff0c;属性是数据成员&#xff08;类变量 和 实例变量&#xff09;和方法&#xff0c;可…

FPGA实验三:状态机的设计

目录 一、实验目的 二、实验要求 三、实验代码 1.design source文件部分代码 2.测试文件代码 四、实验结果及分析 1、引脚锁定 2、仿真波形及分析 &#xff08;1&#xff09;设计好序列检测器 &#xff08;2&#xff09;仿真波形&#xff08;检测11010&#xff09; 3…

Python爬虫实战之原神公告获取

前言 好久不见了吧&#xff0c;博主最近也是成为了准高三&#xff0c;没有太多时间去创作文章了&#xff0c;所以这篇文章很有可能是高考前最后一篇文章了(也不一定&#x1f609;) 言归正传&#xff0c;本次文章主要讲解如何去爬取原神官网的公告(我不玩原神&#xff01;&…

英飞凌BLDC驱动芯片替换-屹晶微

EG12521替代IR2106&#xff0c;NCP5106 EG2003替代IR2003 EG2103替代IR2103、IRS2003&#xff0c;IRS2108 EG2104替代IR2104 EG2104D替代IR2104、IR2008、IR2004 EG2104M替代IR2104、IR2008、IR2004 EG2104S替代IR2104 EG2106替代IR2106、IR2101、FAN7382、IRS2005、NCP…

使用flask开启一个简单的应用

Flask是非常流行的 Python Web框架&#xff0c;它能如此流行&#xff0c;原因主要有如下几点: 。有非常齐全的官方文档,上手非常方便。 。有非常好的扩展机制和第三方扩展环境&#xff0c;.工作中常见的软件都会有对应的扩展。自己动手实现扩展也很容易。 。社区活跃度非常高。…

基于springboot的智慧养老系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…

less 笔记

1 margin-left 之后有 margin: 0 导致margin-left 无效 --> 不能重复定义 .btn-group {margin-left: calc(100% - 350px);display: inline-block;margin: 0; // 重复定义 导致上面 没有效果padding: 0; } 2 一定要F12检查元素 看各个div的宽度是否太长 导致靠左靠右 计算不…

[SSM]Spring6基础

目录 一、Spring启示录 1.1OCP开闭原则 1.2DIP依赖倒置原则 1.3IoC控制反转 1.4DI依赖注入 二、Spring概述 2.1Spring简介 2.2Spring八大模块 2.3Spring特点 三、Spring的入门程序 3.1Spring的文件 3.2第一个Spring程序 3.3第一个Spring程序详细剖析 3.4Spring6启…

Vue绑定class样式

效果&#xff1a;指定变换成某种颜色 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><style>.basic{width: 400px;height: 100px;border: 1px solid black;}.happy{backg…

谈谈——互联网生活中的隐私保护

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

打包apk时出现Execution failed for task ‘:app:lintVitalRelease

程序可以正常运行&#xff0c;但是打包apk的时候报Execution failed for task ‘:app:lintVitalRelease导致打包失败&#xff0c;原因是执行lintVitalRelease失败了&#xff0c;存在错误。解决办法&#xff1a;在app模块的build.gradle的Android里面添加如下代码&#xff1a; l…