Python3.*(第十八课——循环结构-要循环的学习)

嵌套循环

       假设外层循环的循环次数为 n 次,内层循环的循环次数为 m 次,那么内层循环的循环体实际上需要执行 n × m 次。

# 外层循环
for i in range(0, 5) :
    j = 0
    # 内层循环
    while j < 3 :
        print("i的值为: %d , j的值为: %d" % (i, j))
        j += 1

其实不仅可以两层甚至三层、四层,都可以把内层循环当外层循环的循环体来对待就可以了。

for表达式

用于利用其他区间、元组、列表等可迭代对象创建新的列表。

       for 表达式的语法格式 如下:

              [表达式 for 循环计数器 in 可法代对象]

       for 表达式和for循环之间的差别:

              ①在 for 关键字之前定义一个表达式,该表达式通常会包含循环计数器

              ②for 表达式没有循环体,因此不需要冒号。

for 表达式最终返回的是列表,因此 for 表达式也被称为列表推导式

a_range = range(10)
# 对a_range执行for表达式
a_list = [x * x for x in a_range]
# a_list集合包含10个元素
print(a_list)

解释:程序生成的a_list同样包含10个元素,每个元素都是a_range中每个元素的平方(由表达式x*x控制)

添加if判断,只迭代那些符合条件的元素

b_list = [x * x for x in a_range if x % 2 == 0]
# a_list集合包含5个元素
print(b_list)

将 for 表达式的方括号改为圆括号, for 表达式将不再生成列表,而是生成一个生成器 (generator),该生成器同样可使用 for 循环选代。这种 for 表达式也被称为生成器

# 使用for表达式创建生成器
c_generator = (x * x for x in a_range if x % 2 == 0)
# 使用for循环迭代生成器
for i in c_generator:
    print(i, end='\t')
print()

for表达式也支持多层循环:

d_list = [(x, y) for x in range(5) for y in range(4)]
# d_list列表包含20个元素
print(d_list)

其中x可以迭代5次,y可以迭代4次。所以一共是20次 等同于如下:

dd_list = []
for x in range(5):
    for y in range(4):
        dd_list.append((x, y))
print(dd_list)

三层嵌套:

e_list = [[x, y, z] for x in range(5) for y in range(4) for z in range(6)]
# 3_list列表包含120个元素
print(e_list)

for表达式多层循环也支持添加if条件。

需求:程序要将两个列表种的数值按“能否整除”的关系配对在一起。

src_a = [30, 12, 66, 34, 39, 78, 36, 57, 121]
src_b = [3, 5, 7, 11]
# 只要y能整除x,就将它们配对在一起
result = [(x, y) for x in src_b for y in src_a if y % x == 0]
print(result)

常用工具函数

       zip()函数可以把两个列表“压缩” 成一个 zip 对象(可迭代对象)。

       zip()函数压缩的两个列表长度不相等, 那么 zip()函数将以长度更 短的列表为准。

       zip()函数压缩得到的对象是由原列表元素组成的元组。

       Python2.x的zip函数直接返回列表,而不是返回zip对象

       Python2.x的zip函数返回的列表所包含的元素和Python3.x的zip返回的zip对象所包

       含的元素相同。

       zip()函数也可以压缩多个列表,压缩N个列表,zip函数返回的可迭代对象的元素就是

       长度为N的元组。

		a=['a','b','c','d','e']
		b=['1','2','3']
		print([x for x in zip(a,b)])
			输出结果:
				[(‘a’, ‘1’), (‘b’, ‘2’), (‘c’, ‘3’)]

		a=['a','b','c','d','e']
		b=['1','2','3']
		c=['Hello','Word']
		print([x for x in zip(a,b,c)])
			输出结果:
				[(‘a’, ‘1’, ‘Hello’), (‘b’, ‘2’, ‘Word’)]

reversed()可以将数可接收各种序列(元 组、列表、区间等)参数, 然后返回一个“反序排列”的法代器,该函数对参数本身不会产生任何影响

			a=['a','b','c','d','e']
			print([x for x in reversed(a)])
			print(a)
		#输出结果:
			[‘e’, ‘d’, ‘c’, ‘b’, ‘a’]
			[‘a’, ‘b’, ‘c’, ‘d’, ‘e’]

reversed()当然也可以对列表、元组进行反转。实现在不影响字符串本身的前提下,对字符串进行反序遍历。

#反转列表
b = ['a','fkit',20,3.4,50]
[x for x in reversed(b) ]
#输出结果:
[50,3.4,20,'fikt','a']
		d='Hello World'
		print([x for x in reversed(d)])
		#输出结果:
			[‘d’, ‘l’, ‘r’, ‘o’, ‘W’, ’ ', ‘o’, ‘l’, ‘l’, ‘e’, ‘H’]

sorted()函数, 返回一个对元素排序的列表;函数也不会改变所传入的可迭代对象, 该函数只是返回一个 新的、排序好的列表

e=[12,34,5,7,90,-23,56]
print(sorted(e))
print(e)

sorted()函数:reverse 参数,如果将该参数设置为 True,则表示反向排序

      例如:sorted(a,reverse=True)    a = [90,30,-1.2,3.6,3.5,-1.2]

也可根据字符串长度排序。该指定一个key参数,比如希望根据字符串长度排序,则可以key参数传入len函数。

      f = ['banana','orange','apple']

      sorted(f,key=len)

和sorted()函数结合,对可迭代对象按照由小到大的顺序进行遍历。

例如:

my_list = ['fkit', 'crazyit', 'Charlie', 'fox', 'Emily']
for s in sorted(my_list, key=len):
print(s)

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值