Python推导式
Python推导式
推导式:是Python中提供的一个非常方便的功能,可以通过一行代码实现创建 list、dict、tuple、set的同时初始化一些值。
1.列表推到式
# -*- coding: utf-8 -*-
'''
@Time : 2022/1/8 10:07
@Author : ziqingbaojian
@File : 01.学习使用.py
'''
# 1.列表推导式
num_list=[i for i in range(0,10)]
print(num_list)
num_list=[[i,i] for i in range(0,10)]
print(num_list)
num_list=[i**2 for i in range(0,10) if i >6]
print(num_list)
num_list=[i+100 for i in range(0,10) if i >6]
print(num_list)
num_list=['啊哈{}'.format(i) for i in range(0,10) if i >6]
print(num_list)
# for前面的字是列表中的元素值,可以做操作,for循环后可以添加if条件
2.集合推导式
2.1 补充可哈希
-
什么是可哈希(hashable)?
- 简要的说可哈希的数据类型,即不可变的数据结构(字符串str、元组tuple、对象集objects)。
-
哈希有啥作用?
- 它是一个将大体量数据转化为很小数据的过程,甚至可以仅仅是一个数字,以便我们可以用在固定的时间复杂度下查询它,所以,哈希对高效的算法和数据结构很重要。
-
什么是不可哈希(unhashable)?
- 同理,不可哈希的数据类型,即可变的数据结构 (字典dict,列表list,集合set)
2.2 字典推导式的使用
# 2.集合推导式
# 注:使用集合推导式的时候应该确保元素可哈希,即元素不可变
num_set={i for i in range(10)}
print(num_set)
num_set={(i,i+1) for i in range(10)}
print(num_set)
num_set={i for i in range(10) if i>3}
print(num_set)
3.字典推导式
- 注意:字典中的键应该像集合中的元素一样,确保可哈希,即不可变。
3.1 基本使用
# 3.字典推导式
num_dict={i:i for i in range(10)}
print(num_dict)
num_dict={i:i+1 for i in range(10)}
print(num_dict)
num_dict={i:"啊哈{}".format(i) for i in range(10)}
print(num_dict)
num_dict={i:"啊哈{}".format(i) for i in range(10) if i>3}
print(num_dict)
num_dict={i:(i,i+1) for i in range(10) if i>3}
print(num_dict)
3.2 完成字典的键值互换
- 注意:如果值存在可变数据类型,则不可以,且值有相同的可能会丢失。
- 使用场景:键的值都是可哈希的数据类型,且值不存在重复值的时候
# 3.1 字典键值互换
dic={1:"a",3:"b",2:"c"}
dic2={v:k for k,v in dic.items()}
print(dic2)
# {'a': 1, 'b': 3, 'c': 2}
4.元组推导式
-
不同于其他的数据类型
- 不会立即生成数据会得到一个生成器。
-
data=(i for i in range(10)) print(data)# <generator object <genexpr> at 0x000000000213F190> print(type(data)) for i in data: print(i)
5.练习题
1.将字典按照键排序,按照{}={} &
格式拼接
dic={
"sign":"md5",
"appid":"wwxxx",
"mch_di":"153000",
"total_free":"9901",
"refund_fee":"10000"
}
# 1.按照键从大到小排序
# dict.items()返回的是元组(KEY,VAULE)
# 按照键排序
# result=sorted(dic.items(),key=lambda x:x[0])
# print(result)
# 按照值排序
# result=sorted(dic.items(),key=lambda x:x[1])
# print(result)
data="&".join(['{}={}'.format(k,v) for k,v in sorted(dic.items(),key=lambda x:x[0])])
print(data)
2.函数执行
def func():
print(123)
datalist=[func for i in range(10)]#执行完,此时i=9
print(datalist)
data_list=[lambda x:x+i for i in range(10)]# 此时不执行函数,执行完i=9
val=data_list[0](100)#100+9
print(val)