一、迭代是什么(人话版)
迭代 = 用 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))