Python—推导式
推导式
推导式:comprehensions(又称解析式),是Python的一种独有特性,相当于语法糖的存在,推导式是可以从一个数据序列构建另一个新的数据序列的结构体。
共有三种推导,在Python2和3中都有支持:
- 列表(list)推导式
- 集合(set)推导式
- 字典(dict)推导式
列表推导式 randint
基本格式: 变量名 = [expression1 for variable in sequence[, if expression2]]
expression1 : 列表生成元素表达式,可以是有返回值的函数。
for variable in sequence : 迭代sequence将variable传入expression1。
if expresiion2 : 可选,根据条件过滤。
1.最基本的列表推导式
>>> arr = [i for i in range(5)]
>>> arr
[0, 1, 2, 3, 4]
2.附带运算的列表推导式
>>> arr = [i**2 for i in range(5)]
>>> arr
[0, 1, 4, 9, 16]
>>> arr = [pow(i, 2) for i in range(5)]
>>> arr
[0, 1, 4, 9, 16]
>>> arr = [pow(i, 2) if i%2==0 else -pow(i, 2) for i in range(5)]
>>> arr
[0, -1, 4, -9, 16]
3.附带条件的列表推导式
>>> arr = [i for i in range(10) if i < 5]
>>> arr
[0, 1, 2, 3, 4]
4.多重循环的列表推导式
>>> list_ = [[1, 2], [3, 4], [5, 6]]
>>> arr = [i for sub_list in list_ for i in sub_list]
>>> arr
[1, 2, 3, 4, 5, 6]
>>> arr = [x+y for x in range(5) for y in range(2)]
>>> arr
[0, 1, 1, 2, 2, 3, 3, 4, 4, 5]
# 0 1 2 3 4
# 0 1 0 1 0 1 0 1 0 1
# 0 1 1 2 2 3 3 4 4 5
5.更多用法
>>> dict_ = {'P':'y', 't':'h', 'o':'n'}
>>> arr = [k+v for k,v in dict_.items()]
>>> arr
['Py', 'th', 'on']
>>> from random import randint
>>> arr = [randint(1, 5) for i in range(5)]
>>> arr
[3, 2, 3, 2, 1]
集合推导式
与列表推导式差不多一样,只不过是将[ ]换为{ }
set_ = {x+y for x in range(5) for y in range(3)}
>>> set_
{0, 1, 2, 3, 4, 5, 6}
>>> set_ = {k+v for k,v in dict_.items()}
>>> set_
{'on', 'Py', 'th'}
字典推导式
变量名 = {表达式 for 临时变量 in 可迭代内容}
>>> new_dict = {i:pow(i, 2) for i in range(5)}
>>> new_dict
{0: 0, 1: 1, 2: 4, 3: 9, 4: 16}
>>> new_dict = {x:'Python'.index(x) for x in 'Python'}
>>> new_dict
{'P': 0, 'y': 1, 't': 2, 'h': 3, 'o': 4, 'n': 5}
>>>
>>> dict_ = {'P':'y', 't':'h', 'o':'n'}
>>> new_dict = {v:k for k,v in dict_.items()}
>>> new_dict
{'y': 'P', 'h': 't', 'n': 'o'}
>>> dict_ = {'a': 10, 'b': 20, 'A': 3, 'C': 7, 'd': 5, 'x': 2, 'X': 4, 'y': 8}
>>> new_dict = {k.upper(): dict_.get(k.lower(), 0) + dict_.get(k.upper(), 0) for k in dict_.keys() if k in 'aAbcDxy'}
>>> new_dict
{'A': 13, 'B': 20, 'X': 6, 'Y': 8}
为什么元组不可以用推导式
Python中,将( )用于了生成器,将列表推导式的[ ]改成( )即可得到生成器。
>>> gener = (i for i in range(5))
>>> type(gener)
<class 'generator'>
>>> gener
<generator object <genexpr> at 0x00000179ECB01BA0>
>>> [i for i in gener]
[0, 1, 2, 3, 4]
>>> [i for i in gener]
[]
不过可以通过类型强制性转换,将生成器转换为对应的类型数据
>>> gener = (i for i in range(5))
>>> list(gener)
[0, 1, 2, 3, 4]
>>> gener = (i for i in range(5))
>>> tuple(gener)
(0, 1, 2, 3, 4)
>>> gener = (i for i in range(5))
>>> set(gener)
{0, 1, 2, 3, 4}
Python—推导式的更多相关文章
- python推导式pythonic必备【华为云技术分享】
版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/devcloud/article/detai ...
- python推导式pythonic必备
编程规范 今天公司新出了一套Python编程规范2.0,一直觉得自己写代码路子有点野,所以仔细的看了下. 多数的内容在网上都能搜到,但有几点需要说说 让我觉得羞愧的注释率 公司要求代码注释行,占代码总 ...
- Python推导式详解,带你写出比较精简酷炫的代码
Python推导式详解,带你写出比较精简酷炫的代码 前言 1.推导式分类与用法 1.1 列表推导 1.2 集合推导 1.3 字典推导 1.4 元组推导?不存在的 2.推导式的性能 2.1 列表推导式与 ...
- Python推导式
Python推导式 推导式:是Python中提供的一个非常方便的功能,可以通过一行代码实现创建 list.dict.tuple.set的同时初始化一些值. 1.列表推到式 # -*- coding: ...
- python推导式与海象运算符
背景:介绍两种python用于语句优化的用法 一.推导式 1.推导式简介: Python 推导式是一种独特的数据处理方式,可以从一个数据序列构建另一个新的数据序列的结构体. 支持:列表(list).元 ...
- python 推导式和迭代器、生成器
1.常用推导式 推导式是从一个或者多个迭代器快速简洁创建数据结构的一种方法. 1.1 _ 列表推导式 最简单的形式: [exprssion for item in iterable] 示例: nu ...
- python 推导式
推导式又称解析式,是Python的一种独有特性.目的是可以从一个数据序列推导出另一个数据序列,适用于python 的list ,dict 和集合 list中的推导式: _list=[i for i i ...
- Python 推导式、迭代器、生成器、模块和包
一.推导式 (一).列表推导式(集合推导式也同理于此) 利用列表推导式,取出1-20内所有偶数 li = [i for i in range(1, 21) if i % 2 == 0] # 如果只有一 ...
- 奇技淫巧,还是正统功夫? - Python推导式最全用法
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取 python免费学习资 ...
随机推荐
- spring 5.x 系列第16篇 —— 整合dubbo (代码配置方式)
文章目录 一. 项目结构说明 二.项目依赖 三.公共模块(dubbo-ano-common) 四. 服务提供者(dubbo-ano-provider) 4.1 提供方配置 4.2 使用注解@Servi ...
- Vue SSR初探
因为之前用nuxt开发过应用程序,但是nuxt早就达到了开箱即用的目的,所以一直对vue ssr的具体实现存在好奇. 构建步骤 我们通过上图可以看到,vue ssr 也是离不开 webpack 的打包 ...
- Programming In Lua 第九章
1, 2, 3, 4, 5, 6, 第6点很关键:先是调用消费者,来唤醒一个协同例程producer,协同例程producer读取一个数据x后调用send.send函数中调用yield(x),该函数将 ...
- 【Linux】一步一步学Linux——VMware虚拟机三种网络模式详解(07)
目录 00. 目录 01. 虚拟网络连接组件 02. 常见网络连接配置 03. 桥接模式 04. NAT 模式 05. 仅主机模式 06. 自定义模式 07. 附录 00. 目录 @ 01. 虚拟网络 ...
- Web自动化测试 一
Web自动化测试 一.为什么要进行web自动化测试 接口测试只能测试后端返回的数据,定位的是后端开发工程师的问题.如果前段出现了问题,我们要使用web测试去发现错误. 具体定位的问题有: 显示的数据: ...
- C++ 洛谷 P1879 [USACO06NOV]玉米田Corn Fields
没学状压DP的看一下 合法布阵问题 P1879 [USACO06NOV]玉米田Corn Fields 题意:给出一个n行m列的草地(n,m<=12),1表示肥沃,0表示贫瘠,现在要把一些牛放在 ...
- JAVA String类型的一些小操作
String类型是否包含某个String类型的函数:源字符串.contains(包含字符串) 返回值为:boolean类型(true或false) String类型把某个字符替换成另一个字符:源字符 ...
- 配置Python虚拟环境
最小化安装的centos7中并没有安装python3 1.安装python3 1)下载安装包: wget https://www.python.org/ftp/python/3.6.2/Python- ...
- HDU 2089:不要62(数位DP)
http://acm.hdu.edu.cn/showproblem.php?pid=2089 不要62 Problem Description 杭州人称那些傻乎乎粘嗒嗒的人为62(音:laoer) ...
- Jmeter实时监控+SpringBoot接口性能实战
性能测试 Jmeter实时监控+SpringBoot接口性能实战 自动化 SpringBoot Java Jmeter实时监控+SpringBoot接口性能实战 一.实验目的及实验环境 1.1.实验目 ...