【廖雪峰python入门笔记】迭代

【廖雪峰Python教程】一、python基础 廖雪峰python教程第一章内容及易错点总结❀ 阅读详情

1. 迭代

在Python中,如果给定一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历我们成为迭代(Iteration)。

在Python中,迭代是通过for ... in来完成的,而很多语言比如C或者Java,迭代list是通过下标完成的,比如Java代码:

for (i=0; i<list.length; i++) {
    n = list[i];
}

可以看出,Python的for循环抽象程度要高于Java的for循环。

因为 Python 的 for循环不仅可以用在list或tuple上,还可以作用在其他任何可迭代对象上。

因此,迭代操作就是对于一个集合,无论该集合是有序还是无序,我们用 for 循环总是可以依次取出集合的每一个元素。

注意: 集合是指包含一组元素的数据结构,我们已经介绍的包括:
1. 有序集合:list,tuple,str和unicode;
2. 无序集合:set
3. 无序集合并且具有key-value对:dict
而迭代是一个动词,它指的是一种操作,在Python中,就是 for 循环。

迭代与按下标访问数组最大的不同是,后者是一种具体的迭代实现方式,而前者只关心迭代结果,根本不关心迭代内部是如何实现的。

3. 索引迭代

Python中,迭代永远是取出元素本身,而非元素的索引。

对于有序集合,元素确实是有索引的。有的时候,我们确实想在 for 循环中拿到索引,怎么办?

方法是使用 enumerate()函数:

>>> L = ['Adam', 'Lisa', 'Bart', 'Paul']
>>> for index, name in enumerate(L):
        print index, '-', name

0 - Adam
1 - Lisa
2 - Bart
3 - Paul

使用 enumerate() 函数,我们可以在for循环中同时绑定索引index和元素name。但是,这不是 enumerate() 的特殊语法。实际上,enumerate() 函数把:

[‘Adam’, ‘Lisa’, ‘Bart’, ‘Paul’]

变成了类似:
[(0, ‘Adam’), (1, ‘Lisa’), (2, ‘Bart’), (3, ‘Paul’)]

因此,迭代的每一个元素实际上是一个tuple:

for t in enumerate(L):
    index = t[0]
    name = t[1]
    print index, '-', name

如果我们知道每个tuple元素都包含两个元素,for循环又可以进一步简写为:

for index, name in enumerate(L):
    print index, '-', name

这样不但代码更简单,而且还少了两条赋值语句。

可见,索引迭代也不是真的按索引访问,而是由 enumerate()函数自动把每个元素变成 (index, element) 这样的tuple,再迭代,就同时获得了索引和元素本身。

实例
在迭代 [‘Adam’, ‘Lisa’, ‘Bart’, ‘Paul’] 时,如果我们想打印出名次 - 名字(名次从1开始),请考虑如何在迭代中打印出来。

  1. 用zip()函数和range()函数替代enumerate()
  2. zip()函数可以把两个 list 变成一个 list:
L = ['Adam', 'Lisa', 'Bart', 'Paul']
for index, name in enumerate(L):
    print index+1, '-', name
L = ['Adam', 'Lisa', 'Bart', 'Paul']
for index, name in zip(range(1,len(L)+1),L):
    print index, '-', name

4.迭代dict的value

我们已经了解了dict对象本身就是可迭代对象,用 for 循环直接迭代 dict,可以每次拿到dict的一个key。

如果我们希望迭代 dict 对象的value,应该怎么做?

dict 对象有一个 values()方法,这个方法把dict转换成一个包含所有value的list,这样,我们迭代的就是 dict的每一个 value:

d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 }
print d.values()
# [85, 95, 59]
for v in d.values():
    print v
# 85
# 95
# 59

如果仔细阅读Python的文档,还可以发现,dict除了values()方法外,还有一个 itervalues() 方法,用 itervalues() 方法替代 values() 方法,迭代效果完全一样:

d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 }
print d.itervalues()
# <dictionary-valueiterator object at 0x106adbb50>
for v in d.itervalues():
    print v
# 85
# 95
# 59

那这两个方法有何不同之处呢?

  1. values() 方法实际上把一个dict 转换成了包含 value 的list。

  2. 但是itervalues()方法不会转换,它会在迭代过程中依次从 dict 中取出 value,所以 itervalues() 方法比 values() 方法节省了生成 list 所需的内存。

  3. 打印 itervalues() 发现它返回一个 对象,这说明在Python中,for 循环可作用的迭代对象远不止 list,tuple,str,unicode,dict等,任何可迭代对象都可以作用于for循环,而内部如何迭代我们通常并不用关心。

如果一个对象说自己可迭代,那我们就直接用 for 循环去迭代它,可见,迭代是一种抽象的数据操作,它不对迭代对象内部的数据有任何要求。

5. 迭代dict的key和value

我们了解了如何迭代 dict 的key和value,那么,在一个 for 循环中,能否同时迭代 key和value?答案是肯定的。

首先,我们看看 dict 对象的items()方法返回的值:

>>> d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 }
>>> print d.items()
[('Lisa', 85), ('Adam', 95), ('Bart', 59)]

可以看到,items() 方法把dict对象转换成了包含tuple的list,我们对这个list进行迭代,可以同时获得key和value:

>>> for key, value in d.items():
...     print key, ':', value
... 
Lisa : 85
Adam : 95
Bart : 59

和 values() 有一个 itervalues() 类似, items() 也有一个对应的 iteritems(),iteritems() 不把dict转换成list,而是在迭代过程中不断给出 tuple,所以, iteritems() 不占用额外的内存。

廖雪峰python教程(1)——基础+函数章节 1. 字符编码 【1】廖雪峰python教程——字符串和编码 【2】彻底弄懂 Unicode 编码 1个字节能表示的最大的整数就是255(二进制11111111=十进制255) 2个字节可以表示的最大整数是65535 4个字节可以表示的最大整数是4294967295 编码类型 内容 问题 ASCII 目前为止共定义了128个字符,包括大小写字母、数字和一些符号,如A-65,... 阅读详情

相关推荐

《廖雪峰python3教程》| 书评 + 学习笔记干货

如果你正在考虑自己适不适合读《廖雪峰python3教程》,不妨看看我的评价~ 我把知识盲点整理成了一份清单,你可以自测,然后参考我的学习笔记哦~

是圣洁呀✨ 2954

廖雪峰-Python教程

Python内置库、第三方库命令行模式:在Windows下,执行一个.py文件# python 文件名.pyPython交互模式:">>>"可变对象:list不可变对象(整数、小数、字符串、tuple):调用自身任意的方法,不会改变该对象自身的内容;

weixin_52024993的博客 5440

爬虫:将廖雪峰网上资源保存为本地PDF文件

偶然中看到[Python之禅]的推文,关注公众号之后,发现里面好多有趣的东西,于是按照作者的讲解,打算自己亲自去试一试! 爬虫:将廖雪峰网上资源保存为本地PDF文件1. 准备工作:1.1 分析网站结构:

nature_XD的专栏 5421

Python 学习路线(2022)

原文链接: Python 学习路线(2022) 前几天整理了一份 Go 学习路线(2022),广受好评。那么趁火打劫,不是,是趁热打铁,又整理了一份 Python 学习路线。 内容依然是从入门到进阶,既有教程,也有经典书籍推荐,还有实战开源项目。 Python 的发展方向还是挺多的,比如服务端开发,爬虫,数据分析,机器学习等,本文推荐的内容全部是服务端开发,Web 开发方向。 主要分为以下几个部分: 文档教程 书籍推荐 Web 开发 开源项目 实用工具 技术社区和博客 文档教程 Python 官方

AlwaysBeta 的专栏 5376

【廖雪峰python教程学习】——(一)python基础

数据类型和变量 Python还允许用r’’’'表示内部的字符串默认不转义 如果字符串内部既包含’又包含" 可以用转义字符\来标识 Python允许用’’’ … ‘’'的格式表示多行内容 在Python中赋值语句,可以把任意数据类型赋值给变量,同一个变量可以反复赋值,而且可以是不同类型的变量[动态语言] [静态语言:Java…]在定义变量时必须指定变量类型,如果赋值的时候类型不匹配,就会报错 在Python中,通常用全部大写的变量名表示常量 print(*objects, sep=' ', end

msmxsd的博客 5177

这篇博客记录廖雪峰python教程的习题(一)

函数 函数的参数 “以下函数允许计算两个数的乘积,请稍加改造,变成可接收一个或多个数并计算乘积: def product(x,y): return x*y 由于是可以接收一个或多个参数,所以想到定义函数时要用可变参数 def product(*numbers): #这个地方*numbers就是可变参数,函数内部numbers其实是作为一个tuple sum=1

柠檬黄先生的博客 1万+

廖雪峰Python教程:中文世界最佳入门路径与高效学习方法

Python作为一门简洁高效的编程语言,其核心价值在于通过清晰的语法和丰富的库支持,帮助开发者快速实现想法。从环境搭建到基础语法,再到函数、面向对象等核心概念,Python的学习路径遵循由浅入深的原则,旨在培养解决问题的编程思维。掌握Python不仅能提升个人工作效率,还能在Web开发、数据分析、人工智能等多个技术领域发挥关键作用。廖雪峰的Python教程精准把握了中文初学者的学习痛点,通过保姆级的环境配置指导和贴近生活的实例讲解,构建了平滑的学习曲线。该教程不仅涵盖变量、数据结构、函数等基础概念,还深入探

weixin_34005090的博客 410

廖雪峰Python与Python基础教程第二版实战大全

控制结构是程序流程的骨架,包括条件判断、循环控制等。Python提供了if、elif、else用于实现分支结构,for和while用于实现循环结构。函数是组织和重用代码的有效工具。在Python中定义函数使用def关键字,可以设置默认参数和可变参数。函数的参数分为位置参数和关键字参数,参数传递是引用传递,但需要注意的是不可变数据类型(如int、string、tuple等)在函数内被修改时,实际上是在创建新的对象。下面是使用函数和控制结构进行编程的一个例子:return 0# 测试函数。

weixin_42515340的博客 1074

看廖雪峰python学习笔记和自己查的关于python的笔记

这次学习python是在学过用过python很久之后二刷学习教程,看的是廖雪峰2.7,确实重复的学习还是不断的有收获,接下来记录一些新学到的知识点 list中有insert函数,可以直接在指定位置插入 &gt;&gt;&gt; classmates ['Michael', 'Bob', 'Tracy', 'Adam'] &gt;&gt;&gt; classmates.insert(1, 'J...

weixin_38104825的博客 1067

python入门基础廖雪峰PDF

python入门基础廖雪峰PDF,讲述了python语言的各个重要特性,非常适合新手入门

廖雪峰最新Python3教程

2018廖雪峰最新Python3官方教程PDF版。小白的Python新手教程,具有如下特点:中文,免费,零起点,完整示例,基于最新的Python 3版本。随着AI时代的来临,Python已经是必学语言。

Python初级教程-廖雪峰Python教程

输入输出\布尔变量\变量\字符串格式化\列表\元组\条件判断\for循环\字典与集合\可变对象与不可变对象\内置函数\定义函数与isinstance\默认参数\默认参数必须指向不可变对象\可变参数\关键字参数与命名关键字参数\函数参数顺序\random常见函数\切片\可迭代对象Iterable\列表生成式\生成器\迭代器\map与reduce函数\filter函数\sorted函数\匿名函数lambda\类和实例\数据封装\访问限制\继承与多态

None 4997

头歌平台 操作系统课堂练习2.3:系统调用

使用 gdb 调试内核,跟踪到 main 函数入口的方法与之前实训一样。系统运行时,执行的前 3 个系统调用的编号和名字分别是什么?系统运行时,执行的前 3 个系统调用的编号和名字分别是什么?本关卡使用版本 1 内核进行分析,版本 1 内核文件存放在。为了完成本关任务,你需要:跟踪系统调用的发生。此时,系统调用号存放在寄存器 eax 中。

lazbuyaotoutu的博客 2万+

【廖雪峰Python教程】三、高级特性

第三章知识点整理及对比归纳。重点提炼:①了解切片左闭右开及反向取数用法②列表生成式和字典推导式的公式背熟,在刷题时有用③理清生成器和迭代器区别,面试八股会问。

学习,学无止境 1059

电赛MSP430F5529之超声波测距+OLED 显示(含主要代码)

目录 前言 一、超声波介绍 二、部分代码 三、总结 题外话: 前言 哎,又双叒叕,电赛延期了,看起来像是遥遥无期,但是肯定要考虑大局,大家就继续抓紧时间学习知识,巩固自己的知识,更进一步。好了,今天主要是继承上一篇博文(OLED显示)写的,主要是写超声波测距的(US-015) 一、超声波介绍 利用TI公司的MSP430F5529单片机+超声波模块+OLED 实现 这里主要是利用单片机定时器的捕获功能来捕获超声波高电平持续时间,再计算得到距离,最后再在OLED 屏幕上显示出来,上图

不说二话的自家人的博客 1万+

ZYNQ RFSoC 的DAC如何做到从 0到Fs频段 信号输出

之前一直没太了解 RFSoC 的DAC如何输出在 Fs/2 到 Fs 频率范围内的信号,例如 ZCU216中的 ZU49DR,其RF-DAC最大采样率是 9.85GSPS,如果想输出的信号中心频率在5.8G,它是如何有效输出在第二奈奎斯特区域范围的信号的。

weixin_44630490的博客 1552

【廖雪峰python入门笔记】列表生成式

1. 生成列表 要生成list [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],我们可以用range(1, 11): &amp;gt;&amp;gt;&amp;gt; range(1, 11) [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 但如果要生成[1x1, 2x2, 3x3, …, 10x10]怎么做?方法一是循环: &amp;gt;&amp;gt;&amp;gt; L = [] &amp;gt;

Datawhale 5139

Virtuoso ADE Explorer实战技巧:从基础操作到高级仿真

本文深入解析了Virtuoso ADE Explorer在模拟电路仿真中的核心价值与实战技巧。作为Cadence平台的专业工具,它专为高效、系统化的设计空间探索而生,能大幅提升PVT验证、参数扫描和蒙特卡洛分析的效率。文章从基础界面操作、并行仿真管理,到高级的参数扫描、数据报告生成及蒙特卡洛结果深度剖析,提供了全面的避坑指南与工作流优化建议,帮助工程师从重复劳动中解放,专注于电路设计与性能优化。

ios99的博客 900

【廖雪峰python学习笔记】循环

廖雪峰python学习:循环 while和for in

weixin_43613882的博客 360

零基础学习CANoe Panel(5)——改变变量的值,控件图像也改变,这是怎么回事?

Panel 中控件的图像随着值变化,是怎么回事?

蚂蚁小兵 2146

Orange3实战教程:转换---预处理

部件提供了多种预处理方法,这些方法可以在单个预处理流程中组合使用。某些方法也可作为独立部件提供,支持更高级的技术和参数调整。连接到测试与评分:在交叉验证的每个批次中应用预处理器,随后学习器的预处理器会作用于预处理后的子集。连接到学习器:覆盖学习器的默认预处理流程,仅应用自定义流程(各学习器的默认步骤详见其文档)。直接连接到原始数据并输出预处理后的数据集,可能导致模型过拟合。:从原始数据中随机选择固定数量或百分比的特征,主要用于高级测试或教学用途。的预处理器输入,同时传入数据和学习器(如。

err2008的专栏 148

#3 高级特性_廖雪峰python文档笔记

高级特性 切片 取前N个元素 1.直接解法 >>> [L[0], L[1], L[2]] ['Michael', 'Sarah', 'Tracy'] 2.暴力循环 >>> r = [] >>> n = 3 >>> for i in range(n): ... r.append(L[i]) ... >>> r ['Michael', 'Sarah', 'Tracy'] 3.切片操作 list切片 &gt

hr_yeah的博客 279

即梦(Dreamina)技术浅析(六):多模态生成模型

多模态生成模型的目标是结合不同模态的数据(如文本和图像),生成新的视觉内容。其核心思想是利用文本描述引导图像或视频的生成过程,使得生成结果能够准确反映用户的意图。

m0_75253143的博客 1337

【廖雪峰python基础】【迭代】练习

学习目标: 请使用迭代查找一个list中最小和最大值,并返回一个tuple: -- coding: utf-8 -- def findMinAndMax(L): 原始思路,比较累赘,还没有养成简练的思维方式 # -*- coding: utf-8 -*- def findMinAndMax(L): if L==[]: return (None,None) else: min = L[0] for i in L: if

d_madizy_的博客 891

视觉Transformer实战 | Data-efficient image Transformer(DeiT)详解与实现

在计算机视觉领域,Vision Transformer (ViT) 已经证明了纯 Transformer 架构在图像分类任务上的强大能力。然而,ViT 通常需要在大规模数据集上预训练才能达到最佳性能,DeiT (Data-efficient image Transformer) 通过引入一系列训练策略和优化,使得 Transformer 模型能够在相对较小的数据集上取得优异表现。本节将详细介绍 DeiT 的技术原理,并使用 PyTorch 从零开始实现 DeiT 模型。

盼小辉丶的博客 1341

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Python 廖雪峰Python练习答案

廖雪峰Python教程:https://www.liaoxuefeng.com/wiki/1016959663602400 高级特性 切片 迭代 列表生成式

qq_40041064的博客 1618

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

上一篇: 【廖雪峰python入门笔记】切片
下一篇: 【廖雪峰python入门笔记】列表生成式
Datawhale
Datawhale 领域专家: 物联网技术领域 领域专家: 物联网技术领域
博客等级 码龄8年 8902粉丝 1079原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值