Python高级教程-迭代
Python中的迭代
如果给定一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历我们成为迭代(Iteration)。
在Python中,迭代是通过for...in来完成的,而很多语言比如C或者Java,迭代list是通过下标完成的,比如Java代码:
for ( int i = 0 ; i < list.length ; i++ ) {
n = list[i];
}
可以看出,Python的for循环抽象程度要高于for循环,因为Python的for循环不仅可以用在list或tuple上,还可以作用在其他可迭代的对象上。
list这种数据类型虽然有下标,但很多其他数据类型是没有下标的,但是,只要是可迭代对象,无论有无下标,都可以迭代,比如dict就可以迭代:
>>> d = {'a':1,'b':2,'c':3}
>>> for key in d:
print(key)
a
c
b
因为dict的存储不是按照list的方式顺序排列,所以迭代的结果顺序很可能不一样。
默认情况下dict迭代的是key。如果要迭代value,可以用for value in d.values,如果要同时迭代key和value,可以用for k,v in d.items()
由于字符串也是可迭代对象,因此,也可以作用于for循环:
>>> for ch in 'ABC':
print ch A
B
C
所以,当我们使用for循环时,只要作用于一个可迭代的对象,for循环就可以正常运行,而我们不太关心该对象究竟是list还是其他数据类型。
那么,如何判断一个对象是可迭代对象呢?方法是通过collections模块的iterable类型判断:
>>> from collections import Iterable
>>> isinstance('abc',Iterable)
True
>>> isinstance([1,2,3],Iterable)
True
>>> isinstance(123,Iterable)
False
最后一个问题,如果要对list实现类似Java那样的下标循环该怎么办?Python内置的enumerate函数可以把一个list变成索引-元素对,这样就可以在for循环中同时迭代索引和元素本身:
>>> for i , value in enumerate(['A','B','C']):
print(i,value) (0, 'A')
(1, 'B')
(2, 'C')
>>> for x,y in [(1,1),(2,4),(3,7)]:
print(x,y) (1, 1)
(2, 4)
(3, 7)
>>>
总结
任何可迭代对象都可以作用于for
循环,包括我们自定义的数据类型,只要符合迭代条件,就可以使用for
循环。
Python高级教程-迭代的更多相关文章
- Python高级教程
关键字is 和 == 的区别 a = 'hello world' b = 'hello world' a == b #返回True a is b #返回False 注意:is 判断是否是一个ID, = ...
- Python高级教程-生成器
生成器(Generator) 通过列表生成式,可以直接创建一个列表.但是,受内存限制,列表的容量肯定是有限的.而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几 ...
- Python高级教程-列表生成式
List Comprehensions(列表生成式) 列表生成式,是Python内置的非常简单却强大的可以用来创建list的生成式. 例如,要生成list:[1,2,3,4,5,6,7,8,9,10] ...
- Python高级特性——迭代(Iteration)
1.给定一个集合list或者tuple,可以通过for …… in ……的语法来实现循环遍历,这个循环我们就叫做迭代 迭代list: >>> m = ['haha','hehe',' ...
- Day8 python高级特性-- 迭代 Iteration
通过for循环来遍历 list.tuple.dict.甚至是字符串,这种遍历被称为迭代. 相比于C的for循环, Python的for循环抽象成都更好,不仅可以用在list或tuple上,还可以用在其 ...
- Python高级教程-多重继承
多重继承 继承是面向对象编程的一个重要的方式,因为通过继承,子类可以扩展父类的功能. Animal类的层次设计,假设要实现以下4中动物: Dog - 狗狗: Bat - 蝙蝠: Parrot - 鹦鹉 ...
- Python高级教程-sorted
Python中的排序算法 排序是程序中经常用到的算法.通常规定,对于两个元素x和y,如果认为x<y,则返回-1,如果认为x == y,则返回0,如果认为x > y,则返回1,这样,排序算法 ...
- Python高级教程-filter
Python中的filter() Python内建的filter()函数用于过滤序列.和map()类似,filter()也接收一个函数和一个序列.和map()不同的是,filter()把传入的函数依次 ...
- Python高级教程-Map/Reduce
Python中的map()和reduce() Python内建了map()和reduce()函数. map() map()函数接收两个参数,一个是函数,一个是序列,map将传入的函数依次作用到序列的每 ...
随机推荐
- iOS网络访问之使用AFNetworking
AFNetworking是IOS上常用的第三方网络访问库,我们可以在github上下载它,同时github上有它详细的使用说明,最新的AFNetworing2.0与1.0有很大的变化,这里仅对2.0常 ...
- eclipse不自动弹出提示的解决办法(eclipse alt+/快捷键失效)centos 6.7
1.次方法用于没有一点提示的情况:依次打开eclipse上面的windows ——preferences ——java ——editor —— content assist ,在右上方有一行“sele ...
- Control.DataBinding数据绑定细解
在C#操作数据库过程中,针对一般的文本控件,比如TextBox,Label等,我们赋值直接使用类似TextBox.Text=****的方式 来进行,这种方式从某种意义上来说的确是最简便的方式,但是对于 ...
- centos7.2 安装 Elasticsearch5.2
打算上全文检索,就找到了找个产品,开始研究下…… 1.官网地址: https://www.elastic.co/guide/en/elasticsearch/reference/5.2/install ...
- dva学习---effects异步中通过select获取当前的state
根据 在组件中dispatch一个action的例子中,如果要在effects中对于param数据和当前的state数据进行再出处理,这里怎么获取state呢?采用select,如下: e ...
- python文章的抓取
# coding = utf-8import urllibimport sysimport urllibimport jsonimport socketimport timesys.path.appe ...
- 【PM面试题】请设计一个老年人用的新闻App
考虑用户需求及痛点 老年人由于特殊的生理特点,需要考虑其阅读的痛点,加入例如文字大小自定义,朗读新闻,放大镜功能.同时在软件设计上减少文字的量,多放入一些多媒体的内容. 老年人会对过去发生的一些事情产 ...
- DevelopmentValue
DevelopmentValue mysql为utf8为什么网页返回数据及写入mysql数据库均为乱码? eclipse运行配了maven之后,创建包也弹出这个错误,每次都弹 c语言怎么建立txt文件 ...
- MySQL Migration Toolkit启动报jre错误
正常启动的话,会报出“an error occurred during the initialization of the runtime system.Please make sure you ha ...
- java算法-数学之美二
上一章已经说过利用数学思想来解决程序算法问题,实际上就是找规律.这在我们上学时经常遇到,比如给出一段数字,求某一个位置该填写什么数,只要找到规律那就迎刃而解.好了,废话不多说,再来看看案例分析. ...