高级特性之可迭代
# 无论什么语言中 都有迭代 迭代指的是用for循环遍历一个list或者tuple ,迭代方式都差不多 比如在java中用for循环python中用的是for...in... 可以迭代对象
# for... in... for(x,y) in obj 最多只能接收2个参数
import math
for x in [1,2,3]: # list
print(x)
for x in ('A','B','C'): # tuple
print(x)
for x in 'abc': # string
print(x)
L = {'dp': 24, 'cpy': 23, 'ch': 10}
for x in L: # dict
print(x)
# 对于 dict对象 如果我们需要迭代出他们的值呢?
for v in L.values():
print(v)
# 对于 dict对象 如果我们需要迭代出他们的key 和 value呢
for k,v in L.items():
print('key: ',k ,'value: ', v)
# 迭代对象有时候我们需要知道 迭代的索引了 ,那么我们需要知道一个方法:enumerate(索引,值) enumerate(索引,值) enumerate(索引,值) 只针对与list tuple string 等可迭代数据类型
for (i, v) in enumerate(['A','B','C']):
print('index: ', i, 'value: ', v)
for (i, v) in enumerate(('a', 'b', 'c')):
print('index: ', i, 'value: ', v)
for (i, v) in enumerate(('zxy')):
print('index: ', i, 'value: ', v)
for i, v in enumerate(L.items()): # L.values() 只有value L 只有key值
print('index: ',i ,'value: ', v) # v 是一个tuple对象 不可变
print('index: ',i , 'key: ', v[0] ,'value: ', v[1])
# 进阶
for i, x in enumerate([(1,2),(3,4),(5,6)]):
print('i:', i, 'x: ',x )
# for x in 123: # 整数不能被迭代
# print(x)
练习
请使用迭代查找一个list中最小和最大值,并返回一个tuple: 冒泡
# def findMinAndMax(L):
# if L == []:
# return (None, None)
# return (min(L), max(L))
def findMinAndMax(L):
if len(L) > 0:
if len(L) == 1:
return (L[0], L[0])
else:
min = L[0]
max = L[0]
for v in L:
while min > v:
min = v
while max < v:
max = v
return (min, max)
else:
return (None, None)
# 测试
# findMinAndMax([7, 1, 3])
if findMinAndMax([]) != (None, None):
print('测试失败!')
elif findMinAndMax([7]) != (7, 7):
print('测试失败!')
elif findMinAndMax([7, 1]) != (1, 7):
print('测试失败!')
elif findMinAndMax([7, 1, 3, 4, 8, 9]) != (1, 9):
print('测试失败!')
else:
print('测试成功!')
小结
任何可迭代对象都可以作用于for循环,包括我们自定义的数据类型,只要符合迭代条件,就可以使用for循环。
关注一波!喜欢一波!本人是前端菜鸟,正在做自己的个人博客邓鹏的博客,欢迎来交流学习, 使用的技术 vue + koa2 + mysql + php + nginx!