python中的for循环

for循环

while语句非常灵活,它可以用来在任何条件为真的情况下重复执行一个代码块。
但是如果要为一个集合(序列和其他可迭代对象)的每个元素都执行一个代码块。可以使用for循环。
注意:可迭代对象是指可以按次序迭代的对象(也就是for循环中的)。

words = [‘hello’,’python’]
for word in words:
print word
hello
python
或者
numbers = [1,2,3,4,5,6]
for number in numbers:
print number,
1 2 3 4 5 6
因为迭代(循环的另一种说法)某范围的数字是很常见的,所以有个内建的范围函数供使用:
range(0,10)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Range函数的工作方式类似于分片。它包含上限和下限。上个例子来说,包含0,但是不包含10.

循环遍历字典元素

一个简单的for循环就可以循环字典的所有键,就像处理序列一样:

d = {‘x’:1,’y’:2,’z’:3}
for key in d:
print key,’correspond to’,d[key]

y correspond to 2
x correspond to 1
z correspond to 3
d.items()方法会将键-值作为元组返回。for循环的一大好处就是可以循环中使用序列解包。

d = {‘x’:1,’y’:2,’z’:3}
for key,value in d.items():
print key,’correspond to’,value

y correspond to 2
x correspond to 1
z correspond to 3
注意:字典元素的顺序通常是没有定义的。换句话说,迭代的时候,字典中的值都能保证被处理,但是处理顺序不确定。如果顺序很重要的话,可以将键值保存在单独的列表中,例如在迭代之前进行排序。

一些迭代工具

1.并列迭代
程序可以同时迭代两个列表。

names = [‘liubei’,’sunquan’,’adou’]
ages = [38,20,6]
for i in range(len(names)):
print names[i],’is’,ages[i],’years old’

liubei is 38 years old
sunquan is 20 years old
adou is 6 years old
内建的zip函数可以用来进行并行迭代,可以把两个序列‘压缩’在一起,然后返回一个元组的列表:

zip(names,ages)
[(‘liubei’, 38), (‘sunquan’, 20), (‘adou’, 6)]

现在可以在循环中解包元组:

for name,age in zip(names,ages):
print name,’is’,age,’years old’
liubei is 38 years old
sunquan is 20 years old
adou is 6 years old
zip函数也可以作用于任意多的序列,关于它很重要的一点是zip可以应付不等长的序列:当最短的序列‘用完’的时候就停止
zip (range(5),xrange(10))
[(0, 0), (1, 1), (2, 2), (3, 3), (4, 4)]
在上面的代码中,不推荐使用range代替xrange,尽管只需要前5个数字,但是range会计算所有的数字,这需要花费很长的时间。而使用xrange就没有这个问题了,它只计算前5个数字。

2.编号迭代
没看懂,也不知道什么用。先看下一个吧。
3.翻转和排序迭代
两个有用的函数reversed和sorted():它们同列表的reversed和sort(sorted和sort使用同样的参数)方法类似,但作用于任何序列或者迭代对象上,不是原地修改对象,而且返回翻转或排序后的版本:

sorted([3,2,1,1,4,5,8,7])
[1, 1, 2, 3, 4, 5, 7, 8]
sorted(‘hello’)
[‘e’, ‘h’, ‘l’, ‘l’, ‘o’]
list(reversed(‘hello’))
[‘o’, ‘l’, ‘l’, ‘e’, ‘h’]
注意:sorted()方法返回列表,reversed()方法却返回可迭代对象。

跳出循环

一般来说,循环会一直执行到条件为假,或者到序列元素用完时。
如果想提前中断一个循环,进行新的迭代或者仅仅想结束循环。

from math import sqrt
for n in range(99,0,-1):
root = sqrt(n)
if root == int(root):
print n
break
81

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值