Python高级特性(切片,迭代,列表生成式、生成器、迭代器)
2017-12-15 09:17
1281 查看
[align=left]一、切片:取出list或者tuple的任意 元素([b]部分或者所有)[/b][/align]
[align=left] 1. 语法:L[a:b:c] ,表示取出L中的从a到b的元素,每c个取一次,当a为0时可以省略不写即L[:b:c],当c为1时可以不写即L[a:b],[/align]
eg: lis=[1,2,3,4,5,6]
print(lis[0:5:2])#输出[1, 3, 5],从0到5(含前不含后,包0不包5,即索引0到4),每2个元素取一次
[align=left] 切片也支持逆序,上述print(list(L[-5:])) 输出结果为[2, 3, 4, 5, 6]即从-5到-1,记住倒数第一个元素的索引是
2.
tuple也是一种list,唯一区别是tuple不可变。因此,tuple也可以用切片操作,只是操作的结果仍是tuple:
[align=left] eg:print((10,11,12,13,13,14,15)[:3])输出结果为(10, 11, 12)[/align]
[align=left] 3.字符串也是一种list,也可以进行切片操作
[/align]
[align=left] eg: print('ABCDEFG'[::3])输出结果为ADG[/align]
综合栗子:利用切片操作,实现一个trim()函数,去除字符串首尾的空格,注意不要调用str的
[align=left]判断一个对象是可迭代对象呢?方法是通过collections模块的Iterable类型判断
[/align]
[align=left]综合栗子:用迭代查找一个list中最小和最大值,并返回一个tuple[/align]
[align=left]
[align=left]双层循环可以作用于多个对象[/align]
[align=left]综合栗子:list中所有的字符串变成小写
[/align]
1.创建方式一:将列表生成式的[]改为(),eg
2..创建方式二:一个函数 中含有yield关键字
变成generator的函数,在每次调用
eg:
综合栗子:
杨辉三角定义如下:
把每一行看做一个list,试写一个generator,不断输出下一行的list:
[align=left] 1. 语法:L[a:b:c] ,表示取出L中的从a到b的元素,每c个取一次,当a为0时可以省略不写即L[:b:c],当c为1时可以不写即L[a:b],[/align]
eg: lis=[1,2,3,4,5,6]
print(lis[0:5:2])#输出[1, 3, 5],从0到5(含前不含后,包0不包5,即索引0到4),每2个元素取一次
[align=left] 切片也支持逆序,上述print(list(L[-5:])) 输出结果为[2, 3, 4, 5, 6]即从-5到-1,记住倒数第一个元素的索引是
-1。[/align]
2.
tuple也是一种list,唯一区别是tuple不可变。因此,tuple也可以用切片操作,只是操作的结果仍是tuple:
[align=left] eg:print((10,11,12,13,13,14,15)[:3])输出结果为(10, 11, 12)[/align]
[align=left] 3.字符串也是一种list,也可以进行切片操作
[/align]
[align=left] eg: print('ABCDEFG'[::3])输出结果为ADG[/align]
综合栗子:利用切片操作,实现一个trim()函数,去除字符串首尾的空格,注意不要调用str的
strip()方法
st=' abc ' print(st.strip()) def trim(S): s='' for x in S: if x==' ': continue else: s=s+x return s print(trim(st))二、迭代:给定一个list或tuple,我们可以通过
for ... in来遍历这个list或tuple,这种遍历我们称为迭代(Iteration),除了list和tupe之外还可以迭代任何其他可迭代的对象,比如字符串,dirct等
[align=left]判断一个对象是可迭代对象呢?方法是通过collections模块的Iterable类型判断
[/align]
from collections import Iterable print(isinstance('abc',Iterable)) print(isinstance(23,Iterable))#整数是不可迭代的Python内置的
enumerate函数可以把一个list变成索引-元素对,
for i,value in enumerate(['A','B','C']):#通过enumerate函数可以把一个list变成索引元素对 print(i,value)迭代dirct
for key in d:#迭代key print(key) for value in d.values():#迭代value print(value) for key,value in d.items():#迭代key value print(key,value)
[align=left]综合栗子:用迭代查找一个list中最小和最大值,并返回一个tuple[/align]
def findMinAndMax(L): min=L[0] max=L[0] for x in L: if x<min: min=x if x>max: max=x return (min,max) print(findMinAndMax([12,34,23]))三、列表生成式:将一种运算规则作用于一个列表从而生成一个新的列表
[align=left]
print([x*x for x in range(1,11)])#生成[1x1, 2x2, 3x3, ..., 10x10]将乘方运算作用于一个list,输出[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
print([m+n for m in 'ABC' for n in 'XYZ'])#双层循环输出['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ'][/align]
[align=left]双层循环可以作用于多个对象[/align]
d = {'x': 'A', 'y': 'B', 'z': 'C' } print([k+'='+v for k,v in d.items()])输出['y=B', 'z=C', 'x=A']
[align=left]综合栗子:list中所有的字符串变成小写
[/align]
L1 = ['Hello', 'World', 18, 'Apple', None] print([s.lower() for s in L1 if isinstance(s,Iterable)])四、生成器(generator),在Python中,这种一边循环一边计算的机制,称为生成器(Generator)属于列表生成式的进化,比列表生成式更节约内存,
1.创建方式一:将列表生成式的[]改为(),eg
g=(x*x for x in range(10))生成器的核心在于算法,如果算法比较复杂可以将算法写成函数
2..创建方式二:一个函数 中含有yield关键字
变成generator的函数,在每次调用
next()的时候执行,遇到
yield语句返回,再次执行时从上次返回的
yield语句处继续执行。
eg:
def odd(): print('step1') yield 1 print('step2') yield 2 print('step3') yield 3 s=odd() print(next(s))#python3.x中next()函数代替2.x中的.next()方法 print(next(s)) print(next(s))输出结果为
综合栗子:
杨辉三角定义如下:
1 / \ 1 1 / \ / \ 1 2 1 / \ / \ / \ 1 3 3 1 / \ / \ / \ / \ 1 4 6 4 1 / \ / \ / \ / \ / \ 1 5 10 10 5 1
把每一行看做一个list,试写一个generator,不断输出下一行的list:
def triangles(n): #共n行但是下标是从0-(n-1) i=0 L=[1] if n<0: return elif n==1: yield L else: if i==0: i=i+1 yield L while i<=n: L=[1]+[L[x]+L[x+1] for x in range(i-1)]+[1] yield L i=i+1 for l in triangles(6): print(l)运行结果:
相关文章推荐
- Python高级特性(切片 迭代 列表生成式 生成器 迭代器)学习笔记
- 【Python】[高级特性]切片,迭代,列表生成式,生成器,迭代器
- Python高级特性(切片,迭代,列表生成式,生成器,迭代器)
- python的高级特性:切片,迭代,列表生成式,生成器,迭代器
- Python的高级特性之切片、迭代、列表生成式、生成器
- Python之高级特性(切片,迭代,列表生成式,生成器)
- python2.7学习笔记(6) ——高级特性:切片、迭代、列表生成式、生成器
- 7.python高级特性:切片,迭代,列表生成式,生成器,迭代器
- python切片、迭代、生成器、列表生成式等高级特性学习
- Python高级特性-迭代(Iteration)-列表生成式-生成器
- Python的高级特性(切片,迭代,生成器,迭代器)
- 三、python高级特性(切片、迭代、列表生成器、生成器)
- python切片、迭代、列表生成器、生成器、迭代器
- Python学习 Day 4 函数 切片 迭代 列表生成式 生成器
- Python之列表生成式、生成器、可迭代对象与迭代器
- Python3 基础:高级特性-列表生成式和生成器
- 初学python:切片、迭代、列表生成式、生成器
- Python(八)切片、迭代、列表生成式、生成器
- Python笔记3——切片,迭代,列表生成式,生成器
- (入门)切片、迭代、列表生成式、生成器、迭代器