列表推导式
写一个列表:
squares = [] for x in range(10): squares.append(x2) print(squares) 用推导式优化后: squares = [] squares = [x2 for x in range(10)] 或者 squar = map(lambda x:x2,range(10))
注: 第一个参数function是一个函数,第二个参数是一个列表。列表中的每一个元素调用函数function,结果构成一个新的序列
运用列表推导式主要是 【我们需要查询的数字符串等(或者这个数对应的函数)+for循环遍历列表+条件】
列表推导式可以包含复杂表达式和嵌套函数; 例如:
from math import pi [str(round(pi,i)) for i in range(1,6)] ['3.1', '3.14', '3.142', '3.1416', '3.14159'] 注:round()函数是一个用于四舍五入的函数,(round(pi,i) i就是表示这个数要保留pi的位数,例: round(80.23456, 2) : 80.23嵌套列表推导:
matrix = [ ... [1, 2, 3, 4], ... [5, 6, 7, 8], ... [9, 10, 11, 12], ... ] [[row[i] for row in matrix] for i in range(4)][[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]可以输出长度为4的3x4矩阵 range()函数是用来限制长度的,和C语言数组用法相似,range(1,6)代表输出长度为1-5;
list(zip(*matrix)) [(1, 5, 9), (2, 6, 10), (3, 7, 11), (4, 8, 12)]字典推导式 典和集合推导式是上面思想的延续,语法差不多,只不过产生的是集合和字典而已
#用字典推导式 dictionary = {key : val for key,val in enumerate(str)} print(dictionary) #用普通方式 index = 0 for x in str: print(index,':',x,end=',') index+=1 print() #用enumrate遍历 print('---------------------------',end='\n') for index,value in enumerate(str): print(index,':',value,end=',')合并key:
mcase = {'a': 10, 'b': 34, 'A': 7, 'Z': 3} mcase_frequency = { k.lower(): mcase.get(k.lower(), 0) + mcase.get(k.upper(), 0) for k in mcase.keys() if k.lower() in ['a','b'] } print mcase_frequency 输出: {'a': 17, 'b': 34}快速更换key和value
mcase = {'a': 10, 'b': 34} mcase_frequency = {v: k for k, v in mcase.items()} print mcase_frequency 输出: {10: 'a', 34: 'b'}集合推导式 与列表相似,将中括号换成大括号。 注:集合中的元素无序且不重复的,自带去重功能,比如:
计算列表中每个值的平方,自带去重功能
lst=[-2,3,-3,5] set1={i**2 for i in lst} print(set1) 输出: {9, 4, 25}就不需要if判断
生成器推导式 (1)生成器推导式的结果是一个生成器对象,而不是列表,也不是元组。 (2)使用生成器对象的元素时,可以根据需要将其转化为列表或元组。 (3)可以使用__next__()或者内置函数访问生成器对象,但不管使用何种方法访问其元素,当所有元素访问结束以后,如果需要重新访问其中的元素,必须重新创建该生成器对象。
(4)生成器对象创建与列表推导式不同的地方就是,生成器推导式是用圆括号创建 python中的生成器
要创建一个generator,有很多种方法,第一种方法很简单,只有把一个列表生成式的[]中括号改为()小括号,就创建一个generator
#列表生成式 lis = [x*x for x in range(10)] print(lis) #生成器 generator_ex = (x*x for x in range(10)) print(generator_ex) 结果: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81] generator object <genexpr> at 0x000002A4CBF9EBA0>