1、迭代
如果给定一个list或tuple,我们可以通过for
循环来遍历这个list或tuple,这种遍历我们称为迭代(Iteration)。
如果要迭代value,可以用for value in d.values()
,如果要同时迭代key和value,可以用for k, v in d.items()
。
如果要对list实现类似Java那样的下标循环怎么办?Python内置的enumerate
函数可以把一个list变成索引-元素对,这样就可以在for
循环中同时迭代索引和元素本身:
for i,value in enumerate(['a','b','c']): print(i,value)
#迭代查找一个list(随机数生成一个list)的最大值与最小值,并返回一个tuple import random def getRandomList(): ranList=[] for i in range(10): ranList.append(random.choice(range(101))) print('生成的随机list为',ranList) return ranList def find_min_max(ranList): minNums=maxNums=ranList[0] for x in ranList: if x<minNums: minNums=x maxNums=max(ranList) return (minNums,maxNums) #dict={'max':maxNums,'min':minNums} print(find_min_max(getRandomList()))
2、列表生成式
练习:如果list中既包含字符串,又包含整数,请讲str类型数据转换为小写
l = ['Hello', 'World', 18, 'Apple', None] print('原list:',l) #此方法自动筛除了非str类型元素 print([x.lower() for x in l if isinstance(x,str)] ) #改进版 L=[] for element in l: if isinstance(element,str)==True: L.append(element.lower()) else: L.append(element) print(L)
3、生成器
在Python中,一边循环一边计算的机制,称为生成器:generator。
斐波拉契数列用列表生成式写不出来,但是,用函数把它打印出来却很容易:
def fib(x): n,a,b=0,0,1 while n<x: print(b) a,b=b,a+b n=n+1 return
>>> fib(6) 1 1 2 3 5 8 'done'
仔细观察,可以看出,fib
函数实际上是定义了斐波拉契数列的推算规则,可以从第一个元素开始,推算出后续任意的元素,这种逻辑其实非常类似generator。
也就是说,上面的函数和generator仅一步之遥。要把fib
函数变成generator,只需要把print(b)
改为yield b
就可以了:
def fib(max): n, a, b = 0, 0, 1 while n < max: yield b a, b = b, a + b n = n + 1 return 'done'
这就是定义generator的另一种方法。如果一个函数定义中包含yield
关键字,那么这个函数就不再是一个普通函数,而是一个generator:
4、迭代器
未完待续......