语句
1. 迭代
迭代中使用的语句或关键字包括 for , while.
迭代的目标对象包括列表,元组,Map,实现Enumable的对象等
关键字 : for, while,range, list, tuple, map, enumable
1.1 For迭代
- 使用For迭代序列对象
nameList = ['W','N','S','H']
for eachName in nameList:
print eachName, '.'
- 使用For迭代序列索引项
for index in range(len(nameList)):
print index, nameList[index]
- 使用For迭代项和索引
for i,name in enumerate(nameList):
print '%d %s'%(i,name)
1.2 While迭代
while迭代比较简单,语句如下
count = 0;
while(count<9):
print 'the index is:',count
count+=1
1.3 Range/xRange生成数组
Range语法 1: range(start,end,step=1)
函数返回 一个包含有K的列表,这里 start<=k<end,从start到end, k每次递增step, step不可以为零。
Range语法2 : range(end)
函数返回一个K长度的列表,从0开始,到end-1结束,列表为[0..end-1]
#[2,5,8,11,14,17]
range(2,19,3)
#[3,4,5,6]
range(3,7)
#[0,1,2,3,4,5,6]
range(7)
xrange只用在for循环中,语法与range相同,比起range,性能更优异。
xrange不在内存中创建完整的拷贝,所以它是不生成整个列表的。
for inx in xrange(7):
print '%3d' % inx
1.4 循环中的else语句
在python中,在for/while代码块内可以使用else,来表示循环正常结束后所执行的语句。
在循环中,如果存在else, 那么break语句会跳过else的执行。
## 最大公约数函数
def showMaxFactor(num):
count = num/2
while count>1:
if num%count == 0:
print 'largest fator of %d is %d' % (num,count)
break;
count -= 1
## 注意,下面的else是循环内的else,而与上面的if并不匹配
else :
print num, 'is prime'
for eachNum in range(10,21):
showMaxFactor(eachNum);
1.5 迭代器/iter()函数
迭代器为类序列对象提供了一个类序列的接口
序列:是一组数据结构,利用它们的索引从0开始一直“迭代”到序列的最后一个条目。
Python的迭代无缝支持序列对象,它还允许程序员迭代非序列类型,包括用户定义的对象。
使用迭代器,可以迭代不是序列,但是表现出序列行为的对象。例如字典的key, 一个文件的行等 。
迭代器的原理:
迭代器的原理同Java/.net的实现机理差不多。
迭代器是一个有next()方法的对象,当一个循环机制需要下一项时,调用迭代器的next()方法可以获得它。当迭代到最后一个时,再次迭代会引发StopInteration异常 ,告诉外部调用者,迭代完成。
# iter方法
myTuple = (12,'xy',34.2)
i = iter(myTuple)
# 12
i.next()
# 'xy'
i.next()
# '34.2
i.next()
# Exception for StopIteration
i.next()
1.6 字典的迭代
字典数据结构的迭代就是通过iterator来实现的。
python还引进了三个新的内建字典的方法来更好的迭代字典数据结构:
## 通过keys迭代
myDict.iterKeys()
## 通过values迭代
myDict.iterValus()
## 通过key/value迭代
myDict.iteritems()
一个典型的字典遍历
knignts = {'gallahad': 'the pure','robin':'the brave'}
for k,v in knights.iteritems():
print k,v
1.7 文件迭代
文件的迭代访问,
- 可以 通过readlines()实现
myFile = open('config.txt')
for eachLine in myFile.readlines():
print eachLine
- 直接内置了迭代器访问
myFile = open('config.txt')
for eachLine in myFile :
print eachLine