python学习笔记 | 7.2、高级特性-迭代
一、迭代是什么(人话版)
迭代 =用 for 循环,一个一个把东西拿出来遍历一遍
- list 能迭代
- tuple 能迭代
- 字符串能迭代
- dict 能迭代
- 数字不能迭代
二、这一节的重点用法
1. 遍历 list
for x in [1,2,3]: print(x)2. 遍历 dict(默认遍历 key)
d = {'a':1, 'b':2} for key in d: print(key)3. 遍历 dict 的 value
for v in d.values(): print(v)4. 同时遍历 key + value
for k, v in d.items(): print(k, v)5. 带下标遍历(enumerate)
for i, val in enumerate(['A','B']): print(i, val)三、现在做这道练习题
题目:
用迭代查找 list 里的最小和最大值,返回一个 tuple
def findMinAndMax(L): return (None, None)思路
- 如果 list 是空,直接返回
(None, None) - 先假设第一个元素是最小值、也是最大值
- 用 for 循环迭代每一个数
- 比最小值还小 → 更新最小值
- 比最大值还大 → 更新最大值
- 最后返回
(min, max)
四、完整代码 + 执行流程讲解
def findMinAndMax(L): # 空列表 if len(L) == 0: return (None, None) # 初始化最小、最大为第一个元素 min_val = L[0] max_val = L[0] # 迭代每一个数 for num in L: if num < min_val: min_val = num if num > max_val: max_val = num return (min_val, max_val)五、程序怎么走?以[7,1,3,9,5]举例
列表不为空
min_val = 7,max_val = 7开始迭代:
num = 7
7 不小于 7,不大于 7 → 不变
num = 1
1 < 7 → min_val = 1
num = 3
不比 min 小,不比 max 大 → 不变
num = 9
9 > 7 → max_val = 9
num =5
不变
- 最终返回:
(1, 9)
六、测试代码
if findMinAndMax([]) != (None, None): print('测试失败!') elif findMinAndMax([7]) != (7, 7): print('测试失败!') elif findMinAndMax([7, 1]) != (1, 7): print('测试失败!') elif findMinAndMax([7, 1, 3, 9, 5]) != (1, 9): print('测试失败!') else: print('测试成功!')测试成功!===分割线=
代码
def findmaxandmin(L): if len(L)==0: return(None,None) L_max=L[0] L_min=L[0] for i in L: if i > L_max: L_max=i if i < L_min: L_min=i return(L_max,L_min) L=[1,2,3,4,5,6,7] print(findmaxandmin(L))==分割线=
练习 1(基础)
完善函数,返回列表里的最大值。
def get_max(L): if len(L) == 0: return None # 在这里写代码 # 测试 print(get_max([3, 1, 4, 2])) # 应该输出 4代码
def get_max(L): if len(L) == 0: return None L_max = L[0] for i in L: if i > L_max: L_max = i return L_max L=[1,2,3,4,5,6,7,8,9,99] print(get_max(L))练习 2(进阶)
完善函数,返回列表里的最小值。
def get_min(L): if len(L) == 0: return None # 在这里写代码 # 测试 print(get_min([5, 8, 3, 9])) # 应该输出 3代码
def get_min(L): if len(L) == 0: return None L_min = L[0] for i in L: if i<L_min: L_min = i return L_min L=[1,2,3,47,8,0] print(get_min(L))练习 3(综合,和原题一样)
返回一个元组:(最小值, 最大值)
def find_min_max(L): # 在这里写代码 # 测试 print(find_min_max([7, 1, 3, 9, 5])) # (1, 9) print(find_min_max([])) # (None, None) print(find_min_max([666])) # (666, 666)代码
def find_min_max(L): if len(L) == 0: return (None, None) L_max=L[0] L_min=L[0] for i in L: if i > L_max: L_max = i if i < L_min: L_min = i return (L_max, L_min) L=[1,2,3,4,5,6,7,8,9,10,11,12] print(find_min_max(L))