python推导式

列表推导式

写一个列表:

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> 
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值