python: 切片,迭代,列表生成器,生成器,迭代器
来源:互联网 发布:淘宝差评多久会不显示 编辑:程序博客网 时间:2024/06/05 23:45
#-*- coding :UTF-8 -*-#一行代码能解决的事情,绝不写五行#1,切片:提取list,tuple中的部分元素:L = ['UMR1','UMR2','UMR3','UMR4','UMR5']print(L[0:3])#暂时取出来。从0到3但不包括3print(L)# 支持倒数取数print(L[-2:-1])#!!!!注意倒数第一个索引时-1# 取前3个数print(L[:2])# 取最后两个数print(L[-2:])# 复制一个lista=L[:]print(a)# 前十个数,每隔两个取一个# 字符串'asdbfh'也可以切片a='asdfghj'[:3]print(a)#切片工具可以节省很多地方的循环#2,迭代(iteration):给定一个list或tuple,通过for来遍历list或tuple#sampled={'a':1,'b':2,'c':3}for key in d: print(key)#迭代key,在dict中也可以迭代valuefor value in d: print(value)#只要for循环作用于一个可迭代的对象,就可运行#利用collections模块的lterablefrom collections import Iterableprint(isinstance('abc',Iterable))#result is Trueprint(isinstance(123,Iterable))#result is False#利用python实现下标循环for i,value in enumerate(['A','B','C']): print(i,value)#同时引入两个变量for x,y in [(1,2),(2,4),(4,8)]: print(x,y)#3,列表生成器list(range(1,11))#>[1, 2, 3, 4, 5, 6, 7, 8, 9, 10][x*x for x in range(1,11)]#>[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]#注:把需要生成的元素''x*x'放在最前面#可以加入条件/循环[x*x for x in range(1,11) if x%2 == 0]#>[4, 16, 36, 64, 100][m+n for m in 'ABC' for n in 'DEF']#>['AD', 'AE', 'AF', 'BD', 'BE', 'BF', 'CD', 'CE', 'CF'][m+n for m in (1,2,3) for n in (3,4,5)]#>[4, 5, 6, 5, 6, 7, 6, 7, 8]#列出文件夹中的所有文件import os[d for d in os.listdir('.')]#>['.emacs.d', '.ssh', '.Trash', 'Adlm', 'Applications', 'Desktop', 'Documents', 'Downloads', 'Library', 'Movies', 'Music', 'Pictures', 'Public', 'VirtualBox VMs', 'Workspace', 'XCode']#practice:#把所有大写字符转换成小写L = ['Hello', 'World', 18, 'Apple', None][s.lower() for s in L if isinstance(s,str)]#4,生成器#在循环中不断推算出后续的元素,python中这种一边循环一边计算的机制,称为生成器#方法一:g=(x*x for x in range(10))print(g)for n in g:#通过for循环取出list print(n)# 应用:# 生成斐波那契数列# 原始方法:def fib(max): n,a,a1,b=0,0,0,1 while n<=max: a=b b=a1+b a1=a n=n+1 print(b) return 'done'fib(5)#可以同时给a,b赋值节省中间变量def fib1(max): n,a,b=0,0,1 while n<max: a,b=b,a+b n+=1 print(b) return 'done'fib1(5)#由于生成list的方式与generater类似:def fib2(max): n,a,b=0,0,1 while n<max: #yield b#当函数定义中包括yield关键字,这个函数就是一个generator a,b=b,a+b n=n+1 yield b return 'done'#generator与普通函数的区别在于,执行到yield返回值(上面函数中,两个yield放置的位置不一样,获得的list就不同)print(fib2(5))#同样利用for循环获取下一个值:for n in fib2(5): print(n)#如果需要捕捉返回值需要捕获StopIteration错误:g=fib2(5)while True: try: x=next(g) print('g:',x) except StopIteration as e: print('Generator returned value:', e.value) break#practice:def tri(max): L=[1] i=0 while i < max: yield L L1=[1] j=0 while j<len(L)-1: #for j in range(0,len(L)): L1.append(L[j]+L[j+1]) j=j+1 print('value of j is',j,'value of len(L)',len(L)) L1.append(1) print('value of len(L1):',len(L1)) L=L1 i=i+1for s in tri(5): print(s)def tri(max): L=[1] i,j=0,0 while i < max: yield L L1=[1] #while j<len(L)-1: for j in range(0,len(L)-1): L1.append(L[j]+L[j+1]) j=j+1 print('value of j is',j,'value of len(L)',len(L)) L1.append(1) L=L1 i=i+1for i in tri(5): print(i)#迭代器Iterator#可以被next()函数调用,并且不断返回下一个值,直到抛出StopIteration错误表示无法继续返回下一个值#用isinstance判断一个对象是否是Iteratorfrom collections import Iteratorisinstance((x for x in range(10)),Iterator)#Trueisinstance([],Iterator)#Falseisinstance((),Iterator)#Falseisinstance({},Iterator)#False#list,turple,dic都不是Iterator,但是Iterable(可以作用在在for循环中)
阅读全文
0 0
- python: 切片,迭代,列表生成器,生成器,迭代器
- Python(八)切片、迭代、列表生成式、生成器
- 初学python:切片、迭代、列表生成式、生成器
- python——切片 迭代 列表生成式 生成器
- 7.python高级特性:切片,迭代,列表生成式,生成器,迭代器
- Python高级特性:切片;迭代;列表生成式;生成器;迭代器
- Python高级特性(切片 迭代 列表生成式 生成器 迭代器)学习笔记
- Python高级特性(切片,迭代,列表生成式、生成器、迭代器)
- Python学习 Day 4 函数 切片 迭代 列表生成式 生成器
- Python笔记3——切片,迭代,列表生成式,生成器
- python切片、迭代、生成器、列表生成式等高级特性学习
- python(六)切片,生成式,生成器,迭代
- 切片,生成式,生成器,迭代
- python06-切片、列表生成器
- Python迭代对象、迭代器、生成器
- python迭代,可迭代对象,生成器,迭代器--
- Python高级特性-迭代(Iteration)-列表生成式-生成器
- 【python】迭代和生成器
- Linux变量设定规则
- <转>String、StringBuffer与StringBuilder之间区别
- patch文件如何合并到源码目录中
- Unity_Unity的出现的Bug_087
- AndroidStudio导出jar包
- python: 切片,迭代,列表生成器,生成器,迭代器
- LeetCode 284. Peeking Iterator--实现Iterator接口的hashNext和next方法,来实现peek方法
- Postgresql数据库count(distinct)优化
- 根据iTOP-4412驱动实验手册实验03Menuconfig_Kconfig,P59配置内核,输入命令make menuconfig出错???
- 【菜鸟级】H5多人网络在线格斗游戏简单Demo
- Golang请求网页返回数据乱码处理一例
- git命令之git tag 给当前分支打标签
- unity的scriptableObject的使用
- tabbar视图控制器之间的切换