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)

Python推导式的更多相关文章

  1. python推导式pythonic必备【华为云技术分享】

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/devcloud/article/detai ...

  2. python推导式pythonic必备

    编程规范 今天公司新出了一套Python编程规范2.0,一直觉得自己写代码路子有点野,所以仔细的看了下. 多数的内容在网上都能搜到,但有几点需要说说 让我觉得羞愧的注释率 公司要求代码注释行,占代码总 ...

  3. Python推导式详解,带你写出比较精简酷炫的代码

    Python推导式详解,带你写出比较精简酷炫的代码 前言 1.推导式分类与用法 1.1 列表推导 1.2 集合推导 1.3 字典推导 1.4 元组推导?不存在的 2.推导式的性能 2.1 列表推导式与 ...

  4. python推导式与海象运算符

    背景:介绍两种python用于语句优化的用法 一.推导式 1.推导式简介: Python 推导式是一种独特的数据处理方式,可以从一个数据序列构建另一个新的数据序列的结构体. 支持:列表(list).元 ...

  5. python 推导式和迭代器、生成器

    1.常用推导式 推导式是从一个或者多个迭代器快速简洁创建数据结构的一种方法. 1.1 _ 列表推导式 最简单的形式:  [exprssion for item in iterable] 示例:  nu ...

  6. python 推导式

    推导式又称解析式,是Python的一种独有特性.目的是可以从一个数据序列推导出另一个数据序列,适用于python 的list ,dict 和集合 list中的推导式: _list=[i for i i ...

  7. Python 推导式、迭代器、生成器、模块和包

    一.推导式 (一).列表推导式(集合推导式也同理于此) 利用列表推导式,取出1-20内所有偶数 li = [i for i in range(1, 21) if i % 2 == 0] # 如果只有一 ...

  8. Python—推导式

    推导式 推导式:comprehensions(又称解析式),是Python的一种独有特性,相当于语法糖的存在,推导式是可以从一个数据序列构建另一个新的数据序列的结构体. 共有三种推导,在Python2 ...

  9. 奇技淫巧,还是正统功夫? - Python推导式最全用法

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取 python免费学习资 ...

随机推荐

  1. HTML 基础1

    HTML 超文本标记语言 文件后缀html,htm 标签成对出现:开始标签--结束标签 元素内容位于开始标签--结束标签之间(可以有空内容) 空元素<a/> 大小写不敏感 元素,属性 &l ...

  2. freeswitch插件式模块接口实现方式

    概述 freeswitch的外围模块是插件式的,可以动态的加载和卸载,使用起来非常的灵活和方便. 如果我们自己来设计一个开源的代码框架,相信这种插件式的模块结构是非常适合多人合作的模式. 本文对fs的 ...

  3. 通俗讲解IP地址的端口

    ========================================================================================= 在我看来,学习jav ...

  4. VC 获取已系统安装的字体

    转载请注明来源:https://www.cnblogs.com/hookjc/ BOOL CALLBACK EnumFonts(CONST LOGFONT* lplf, CONST TEXTMETRI ...

  5. spring 注解注入bean

    通过注解方式注入bean,需要在配置类下注入bean 第一步,配置扫描文件夹 首先要在spring.xml中配置需要扫描的配置类 <context:componenet-scan base-pa ...

  6. new方法实现原理

    new方法实现原理 完整的创建一个可用的对象:Person *p=[Person new]; new方法的内部会分别调用两个方法来完成3件事情: (1)使用alloc方法来分配存储空间(返回分配的对象 ...

  7. 深入Java微服务之网关系列1:什么是网关

    ​ 前言 近来,在想着重构一个新的产品.准备采用微服务的技术解决方案,来搭建基础设施框架.网关,是一个必不可少的组件.那么,网关到底是什么? 其又有什么特点或者特性,成为微服务必不可少的组件呢?今天, ...

  8. netty系列之:让TCP连接快一点,再快一点

    简介 经典的TCP三次握手大家应该很熟悉了,三次握手按道理说应该是最优的方案了,当然这是对于通用的情况来说的.那么在某些特殊的情况下是不是可以提升TCP建立连接的速度呢? 答案是肯定的,这就是今天我们 ...

  9. Note -「Min_25 筛」“你就说这素因子你要不要吧?你要不要?”

      赛上想写,Track Lost 了属于是. \(\mathscr{Intro}\)   Min_25 筛是用于求积性函数前缀和,同时顺带求出一些"有意思"的信息的筛法.   一 ...

  10. 公式编辑器CVE-2018-0798样本分析

      当前样本是一个RTF文档,内嵌一个公式编辑器对象,该对象利用Office编辑器漏洞CVE-2018-0798执行shellcode,对EQNEDT32.exe进行代码注入,执行恶意代码.   使用 ...