Python推导式:推导式是可以从一个数据序列构建另一个新的数据序列的结构体
生成器推导式:生成器推导式的结果是一个生成器对象,使用()
列表(list)推导式:用来快速生成包含多个随机数的列表,使用[]
字典(dict)推导式:字典推导和列表推导的使用方法类似,使用{}
集合(set)推导式: 列表推导的使用方法类似,使用{}
1.生成器推导式:生成器推导式使用圆括号
生成器推导式的结果是一个生成器对象,而不是列表,也不是元组
使用生成器对象的元素时,不管使用哪种方法访问其元素,当所有元素访问结束以后,如果需要重新访问其元素,必须重新创建该生成器对象
>>>g=((i+2)**2 for i in range(10))>>>g<generator object<genexpr> at 0x01E6AE70>>>>tuple(g) #转化为元组(4, 9,16, 25, 36, 49, 64, 81, 100, 121)>>>tuple(g) 元素已经遍历结束()
>>>g=((i+2)**2 for i in range(10)) #重新创建>>>list(g) #转化为列表[4, 9,16, 25, 36, 49, 64, 81, 100, 121]>>>g=((i+2)**2 for i in range(10)) #重新创建>>>g.__next__()4>>>g.__next__()9>>>g.__next__()16
2.列表(list)推导式
>>> aList=[x*x for xin range(10)]>>> aList[0, 1, 4, 9, 16, 25, 36, 49,64, 81]>>>bList=['app','bpp','cpp']>>> cList=[w.strip()for w in bList]>>> cList['app', 'bpp', 'cpp']
(1).使用列表推导式实现嵌套列表的平铺:
>>>vec=[[1,2,3],[4,5,6],[7,8,9]]>>> [num for elem invec for num in elem][1, 2, 3, 4, 5, 6, 7, 8, 9]
(2).过滤不符合条件的元素
>>> aList=[-1,-2,-3,0,1,2,3,-5]>>> [i for i in aList if i>0][1, 2, 3]
(3).在列表推导式中使用多个循环,实现多序列元素的任意组合,并且可以结合条件语句过滤特定元素
>>>[(x,y) for x in range(3) for y in range(2)][(0, 0), (0, 1), (1, 0),(1, 1), (2, 0), (2, 1)]>>>[(x,y) for x in [1,2,3] for y in [3,4,2] if x!=y][(1, 3), (1, 4), (1, 2),(2, 3), (2, 4), (3, 4), (3, 2)]
(4).使用列表推导式实现矩阵转置
>>>[(x,y) for x in [1,2,3] for y in [3,4,2] if x!=y][(1,3), (1, 4), (1, 2), (2, 3), (2, 4), (3, 4), (3, 2)]>>>a=[[1,2,3,4],[5,6,7,8],[9,10,11,12]]>>>[[row[i] for row in a] for i in range(4)][[1, 5,9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]>>>list(zip(*a))[(1, 5, 9), (2, 6, 10),(3, 7, 11), (4, 8, 12)]
(5.)列表推导式中可以使用函数或复杂表达式
>>>def f(v):if v>0:v**2if v<0:vreturn v>>>print([f(v) for v in [2,3,-7,-9,-8] if v>0])[2, 3]
(6).列表推导式支持文件对象迭代
>>>fp=open('D:\file.txt','r')>>>print([linefor line in fp])>>> fp.close()
3.字典推导式和列表推导式的使用方法类似,使用大括号
>>> m={'a':1,'b':2}>>> m_frequency={v:k for k,v inm.items()}>>> m_frequency{1: 'a', 2: 'b'}
文章转载自糟老头修炼记,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




