python学习第八天 -- 迭代
什么是迭代?
在python语言中,迭代的意思就是通过for循环遍历一个有序/无序的集合。
迭代是通过 for x in 集合 来完成的。
前面有提到python中有哪些集合,现在我们来梳理一下:
(1)有序集合:list ,tuple,str 和unicode。
(2)无序集合:set
(3)无序集合并且具有key-value对应关系:dict
直接举个代码例子:
- for循环迭代数列 1-10并打印出5的倍数。
- >>> L = range(1,11)
- >>> for number in L:
- ... if number % 5 == 0:
- ... print number
- ...
- 5
- 10
索引迭代
前面已经有讲过List的用法,可以直接通过索引去到List的元素。但是有时候也要取得索引的值,如何取得?
python针对List提供了 enumerate() 函数。
直接举个代码例子:
- >>> L = ['zhangsan','lixi','wangwu']
- >>> for index,people in enumerate(L):
- ... print index,':',people
- ...
- 0 : zhangsan
- 1 : lixi
- 2 : wangwu
解析:enumerate函数是将['zhangsan','lixi','wangwu']变化成了一个tuple类型。
- ['zhangsan','lixi','wangwu']
- 变成了
- [(0,'zhangsan'),(1,'lixi'),(2,'wangwu')]
所以实际上每一个迭代返回都是一个tuple类型。用如下代码证明:
- >>> L = ['zhangsan','lixi','wangwu']
- >>> for t in enumerate(L):
- index = t[0]
- people = t[1]
- ... print index,':',people
- ...
- 0 : zhangsan
- 1 : lixi
- 2 : wangwu
补充:介绍zip()函数:
zip()函数可以把两个 list 变成一个 list:
- >>> zip([10, 20, 30], ['A', 'B', 'C'])
- [(10, 'A'), (20, 'B'), (30, 'C')]
任务:
在迭代 ['A', 'B', 'C', 'D'] 时,如果我们想打印出顺序 - 字母(名次从1开始),请考虑如何在迭代中打印出来。提示:考虑使用zip()函数和range()函数
- L = ['A', 'B', 'C', 'D']
- for index, name in zip(range(1,len(L)+1),L):
- print index, '-', name
迭代dict
之前内容有提过 ,dict是一个无序并且带key-value的集合。可以通过索引取得key值。但是怎样取得key对应的value值呢?
dict对象有一个values()方法,可以把dict转换为一个带value元素的list。
- >>> d={'zhangsan':45,'lixi':56,'wangwu':90}
- >>> for va in d.values():
- ... print 'score:',va
- ...
- score: 56
- score: 45
- score: 90
PS:在一些教程中有提过 itervalues()函数,但是这个函数在python 3.x版本已经抛弃使用了。不在这里过多讲解。
如果要同时取得key 和value的值,如果迭代取得?
dict对象有一个items()方法,可以把dict对象转换成了包含tuple的list。
- //取得平均分
- >>>d = { 'zhangsan': 95, 'lixi': 85, 'wangwu': 59}
- >>>sum = 0.0
- >>>for name, v in d.items():
- .... sum = sum + v
- .... print name,':',v
- print 'average', ':', sum/len(d)
小结:python的一些集合对象迭代的在一些地方还是比较实用的,但是python 3.x有些attribute抛弃了。大家可以参考python 3.x用户使用文档,就不在这里一一列出。
python学习第八天 -- 迭代的更多相关文章
- Python学习笔记014——迭代工具函数 内置函数enumerate()
1 描述 enumerate() 函数用于将一个可遍历的数据对象(如列表.元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中. 2 语法 enumerate(sequ ...
- Python学习笔记(迭代、模块扩展、GUI 、编码处理等)
PythonIDLE中的编码处理 http://www.tuicool.com/articles/NbyEBr 原文标题:Python中实际上已经得到了正确的Unicode或某种编码的字符,但是看起来 ...
- Python学习笔记(迭代,列表解析,生成器)
迭代(iterable):支持每次返回自己所包含一个对象的 iter()得到迭代器,.next()遍历列表. 列表解析:根据已有列表高效生成列表的方式. 生成器(Generator): 通过列表生成式 ...
- python学习第八天
解析库之bs4的基本使用方法 ''' pip install beautifulsoup4#安装bs4 pip install lxml#安装lxml ''' html_doc = "&qu ...
- Python学习笔记014——迭代工具函数 内置函数zip()
1 描述 zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表. 如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用 * 号操 ...
- python学习第八天二进制和字符编码有关联
计算机所能识别只有0,1这两种状态,但是我们人类用字母,汉字,还有其他语言,那么怎么和计算机进行沟通呢,python编程语言最早unicode,现在统一用utf8,UTF8通用的编码语言,所有语言都包 ...
- Python学习第八天(os)
os主要是实现文件夹的创建和管理功能 os.mkdir(path) 创建目录 os.chdir(path)改变当前工作目录 os.fchdir() 通过文件描述符改变工作目录 os.chroot() ...
- python学习第八天--异常和异常处理
Exception 常用异常: AssertionError 断言语句失败 AttributeError 尝试访问未知的对象属性 IndexError 索引超出序列值 keyError 查找一个不存在 ...
- 《Python学习手册 第五版》 -第14章 迭代和推导
承接上一章for循环的讲解,迭代和推导,是对for循环的一种深入的探索和扩展 本章重点内容 1.迭代 1)什么是迭代?都有哪些分类 2)常规的使用方法 3)多遍迭代器VS单遍迭代器 2.列表推导 1) ...
随机推荐
- 【转】C++读写二进制文件
原文网址:http://blog.csdn.net/lightlater/article/details/6364931 摘要: 使用C++读写二进制文件,在开发中操作的比较频繁,今天有幸找到一篇文章 ...
- 基于HTML5 Canvas的饼状图表实现教程
昨天我们分享了一款基于HTML5的线性图表应用,效果非常不错,可以看在线DEMO或者实现教程.今天我们继续来分享一款基于HTML5的网页图表,它也是利用Canvas绘制的,但是和前面不同的是,这款图表 ...
- C++中关于函数的引用
这一块知识最常见的疑问就是: #include <iostream> #include <cstring> using namespace std; int a[50]; in ...
- C++豆知识索引
C++Memset误区 C++ 哈希表 C++类型转换[转] C++ sizeof C++ 路径中\\与/
- flume的自定义sink-Kafka
1.创建一个agent,sink类型需指定为自定义sink vi /usr/local/flume/conf/agent3.conf agent3.sources=as1 ...
- (转)ObjC利用正则表达式抓取网页内容(网络爬虫)
转自:http://www.cocoachina.com/bbs/read.php?tid=103813 *****boy]原创 2012年5月20日 在开发项目的过程,很多情况下我们需要利用互联网上 ...
- windows服务程序
首先创建一个myService的窗体程序作为服务安装卸载控制器(管理员身份运行vs,windows服务的安装卸载需要管理员权限) 在同一个解决方案里面添加一个windows服务程序,取名myWin ...
- 【C#网络基础】C# get post请求
using KTCommon.Helper; using KTCommon.LOG; using System; using System.Collections.Generic; using Sys ...
- 【性能优化】优化笔记之一:图像RGB与YUV转换优化
本文主要介绍如何优化您自己的CODE,实现软件的加速.我们一个图象模式识别的项目,需要将RGB格式的彩色图像先转换成黑白图像.图像转换的公式如下: Y = 0.299 * R + 0.587 * G ...
- 使用zTree控件制作的表格形式的树形+数据菜单
測试了一下,兼容ie7以上, chrome opera ff 不使用对方css /*------------------------------------- zTree Style version: ...