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. C++ 微信多开

    应用是如何判断多开 一.通过查找窗口标题或者类名来判断程序是否正在运行. 二.通过互斥对象确定程序是否运行,大多数软件都是使用CreateMutexW 判断多开的. 三.内存映射物理文件,控制多开. ...

  2. Discriminative Learning of Deep Convolutional Feature Point Descriptors 论文阅读笔记

    介绍 该文提出一种基于深度学习的特征描述方法,并且对尺度变化.图像旋转.透射变换.非刚性变形.光照变化等具有很好的鲁棒性.该算法的整体思想并不复杂,使用孪生网络从图块中提取特征信息(得到一个128维的 ...

  3. lagou数据爬取

    1. 使用的工具 selenium+xpath+ 手动输入登录 2. 实现的功能: 1.手动登录后,按终端提示,就能下载所需要的内容 import requests import json impor ...

  4. 使用OpenFileDialog打开文件和使用FolderBrowserDialog选定文件夹

    选定文件夹 string foldPath = ""; FolderBrowserDialog dialog = new FolderBrowserDialog(); dialog ...

  5. ApacheCN Java 译文集 20210921 更新

    新增了五个教程: Java 设计模式最佳实践 零.前言 一.从面向对象到函数式编程 二.创建型模式 三.行为模式 四.结构模式 五.函数式模式 六.让我们开始反应式吧 七.反应式设计模式 八.应用架构 ...

  6. [USACO18DEC]Sort It Out P

    初看本题毫无思路,只能从特殊的 \(K = 1\) 出发. 但是直接考虑构造一组字典序最小的方案还是不好构造,可以考虑先手玩一下样例.通过自己手玩的样例可以发现,貌似没有被选出来的数在原排列中都是递增 ...

  7. 羽夏闲谈—— C 的 scanf 的高级用法

    前言   今天看到博友发了个有关scanf的使用的注意事项,就是讨论缓冲区残存数据的问题,用简单的代码示例复述一下: #define _CRT_SECURE_NO_WARNINGS #include ...

  8. Mac 屏幕录制Gif 制作 By-胡罗

    一.视频录制 1)使用Mac系统自带的QuickTime进行屏幕录像 手动打开(如下图) 详细 Mac 基础教程:如何使用 Mac 系统原生的屏幕录制功能 相关快捷键 option+command+n ...

  9. OSPF路由协议基础知识

    OSPF路由协议 1.OSPF的基本概念 2.OSPF邻接关系的建立 3.OSPF的应用环境 4.OSPF的基本配置命令 1.OSPF区域为了适应大型的网络,OSPF在AS(自治系统)内划分多个区域. ...

  10. VUE3 之 动态组件 - 这个系列的教程通俗易懂,适合新手

    1. 概述 暗示效应告诉我们: 巧妙的暗示会在不知不觉中剥夺我们的判断力,对我们的思维形成一定的影响,造成我们行为的些许改变或者偏差. 例如你的朋友说你脸色不太好,是不是病了,此时,你可能就会感觉浑身 ...