9. Python3的基本类型(流程控制[控制循环])

1 常用工具函数

1.1 zip()函数

使用zip()函数可以把两个列表“压缩”成一个zip对象(可迭代对象),这样就可以使用一个循环并行遍历两个列表。

代码测试样例(Ipython环境中测试,后续如无特殊说明,都是在Ipython环境下):

In [1]: l1 = ['a', 'b', 'c', 'd', 'e']

In [2]: l2 = [1, 2, 3, 4]

In [3]: [l for l in zip(l1, l2)]
Out[3]: [('a', 1), ('b', 2), ('c', 3), ('d', 4)]

zip()函数压缩得到的可迭代对象所包含的元素是由原列表元素组成的元组。
zip()函数压缩的两个列表,当长度不相同时,以更短的列表为准。
zip函数也可以压缩多个列表。

In [7]: l3 = [1.0, 2.0, 5.0, 6.0]

In [8]: [ll for ll in zip(l1, l2, l3)]
Out[8]: [('a', 1, 1.0), ('b', 2, 2.0), ('c', 3, 5.0), ('d', 4, 6.0)]

实用代码测试样例:

In [9]: books = ['英语', '语文', '数学', '物理', '化学'] #定义books列表

In [10]: number = [2, 3, 6, 8, 1] #定义number列表

In [11]: prices = [10.12, 11.45, 23.45, 9.56, 9.99] #定义prices列表
 
In [12]: for book, num, price in zip(books, number, prices):  #使用zip()函数
    ...:     print ('%s的剩余数量:%2f,单价是:%5.3f' %(book, num, price))
    ...:
英语的剩余数量:2.000000,单价是:10.120
语文的剩余数量:3.000000,单价是:11.450
数学的剩余数量:6.000000,单价是:23.450
物理的剩余数量:8.000000,单价是:9.560
化学的剩余数量:1.000000,单价是:9.990

1.2 reversed()函数

某些时候,程序需要进行反向遍历,此时可通过reversed()函数,此函数可接收各种序列(元组,列表,区间等)参数,然后返回一个“反序列表”,不会对参数本身产生任何影响。
代码测试样例:

In [17]: range1 = range(10)
In [18]: [r for r in reversed(range1)]
Out[18]: [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

1.3 sorted()函数

接收一个可迭代对象作为参数,返回一个对元素排序的列表。 sorted()函数也不会改变传入的可迭代对象。

In [20]: li = [145, 24, 78, 89, 100, 9]

In [21]: sorted(li)
Out[21]: [9, 24, 78, 89, 100, 145]

sorted函数还可以传入一个参数reverse,设置为True时,表示反向排序。

In [22]: sorted(li, reverse=True)
Out[22]: [145, 100, 89, 78, 24, 9]

sorted函数还可以传入一个参数key,指定一个函数来生成排序的关键值。比如根据字符串长度len来排序。

In [23]: lstr = ['a', 'g', 'sfsdf', 'aser12341', 'sdflj8090000']

In [24]: sorted(lstr, key=len)
Out[24]: ['a', 'g', 'sfsdf', 'aser12341', 'sdflj8090000']

2 控制循环结构

python提供了continue和break来控制循环结构,另外可以使用return结束整个方法,结束了一次循环。

2.1 break

有些时候在某种条件出现时需要强行中止循环,而不是等到循环条件为False时才退出循环。

In [25]: for i in range(10):
    ...:     if i == 5:
    ...:         print ('我被break了,退出循环体,我很伤心。')
    ...:         break
    ...:     else:
    ...:         print ('想break我,开玩笑,我都进入else了.')
    ...:break我,开玩笑,我都进入else.break我,开玩笑,我都进入else.break我,开玩笑,我都进入else.break我,开玩笑,我都进入else.break我,开玩笑,我都进入else.
我被break了,退出循环体,我很伤心。

2.2 continue

continue只忽略当次循环的剩下语句,接着开始下一次循环,不会中止循环;

In [26]: for c in range(10):
    ...:     print ("c的值:", c)
    ...:     if c == 4:
    ...:         continue
    ...:     print ('continue后的输出语句')
    ...:
    ...:
c的值: 0
continue后的输出语句
c的值: 1
continue后的输出语句
c的值: 2
continue后的输出语句
c的值: 3
continue后的输出语句
c的值: 4
c的值: 5
continue后的输出语句
c的值: 6
continue后的输出语句
c的值: 7
continue后的输出语句
c的值: 8
continue后的输出语句
c的值: 9
continue后的输出语句

2.3 return

return用于从包围它的最直接方法,函数或匿名函数返回。本次只说使用return结束方法,其他return不在这次中过多说明。

In [27]: def testReturn():
    ...:     for i in range(10):
    ...:         for j in range(10):
    ...:             print ('i的值是: %d,j的值是: %d' %(i,j))
    ...:             if j == 1:
    ...:                 return
    ...:             print ("return后的输出语句")
    ...:

In [28]: testReturn()
i的值是: 0,j的值是: 0
return后的输出语句
i的值是: 0,j的值是: 1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值