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. ABC209 E Shiritori

    考虑对这个问题进行转化: 显然我们只关注每个串前三个棋子和后三个棋子,并且根据题目的特性,我们可以将任意的三个字符看作点,将一个字符串看作连接两个点的边,这样我们得到了一张点数为 \(52 ^ 3\) ...

  2. linnux命令 - brctl和ifconfig

    1.安装brctl centos7.6安装使用 yum install bridge-utils ubuntu使用 apt-get install bridge-utils 什么是网桥 网桥是一种在链 ...

  3. git rebase git merge

    Git rebase 使用方法 1. git checkout feature 2. git rebase master feature 相当于git rebase master + git chec ...

  4. linux修改root用户登陆密码

    如果不是以root用户登录的,请先切换到root用户下, 执行命令:su root 然后按提示输入root用户的密码. 英文系统: [root@localhost ~]# passwd Changin ...

  5. Java 中使用正则表达式校检IP是否输入正确

    感谢大佬案例:https://www.jb51.net/article/114671.htm 正则表达式学习:(待办)近期总结

  6. 学习jsp篇:jsp Cookie介绍

    这篇博客介绍下Cookie,JSP中比较重要的知识点Session,Cookie,表单数据,过滤器,文件上传.而Session和Cookie一般放在一起讲,在介绍cookie之前,要先介绍下Cooki ...

  7. 隐藏键盘的N种方法

    ---Created by luo.h 显示键盘 [textField becomeFirstResponder]; 隐藏键盘 @interface ViewController ()<UITe ...

  8. Redis 源码简洁剖析 11 - 主 IO 线程及 Redis 6.0 多 IO 线程

    Redis 到底是不是单线程的程序? 多 IO 线程的初始化 IO 线程运行函数 IOThreadMain 如何推迟客户端「读」操作? 如何推迟客户端「写」操作? 如何把待「读」客户端分配给 IO 线 ...

  9. springboot自动扫描添加的BeanDefinition源码解析

    1. springboot启动过程中,首先会收集需要加载的bean的定义,作为BeanDefinition对象,添加到BeanFactory中去. 由于BeanFactory中只有getBean之类获 ...

  10. 从零开始实现一个分布式RPC框架

    该rpc框架是一个mini版的dubbo.学习rpc之前,建议先了解NIO,Netty和Dubbo等知识.请移步网络编程 前言:(借用阿里大佬的一段话) 为什么要自己写一个RPC框架,我觉得从个人成长 ...