Python推导式

Python推导式

推导式:是Python中提供的一个非常方便的功能,可以通过一行代码实现创建 list、dict、tuple、set的同时初始化一些值。

1.列表推到式

image-20220108101254043

# -*- 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条件

image-20220108101825100

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)

image-20220108104911324

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)

image-20220108105412260

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)
    
  • image-20220108111105999

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)

image-20220108113014042

2.函数执行

  • image-20220108113150430
def func():
    print(123)

datalist=[func for i in range(10)]#执行完,此时i=9
print(datalist)

image-20220108113405317

data_list=[lambda x:x+i for i in range(10)]# 此时不执行函数,执行完i=9

val=data_list[0](100)#100+9
print(val)

image-20220108113657310

posted @ 2022-01-08 11:41  紫青宝剑  阅读(104)  评论(0编辑  收藏  举报