[ python ] 各种推导式
各种推导式,主要使用示例演示用法
列表生成式
示例1:求0-9每个数的平方
li = [x*x for x in range(10)]
print(li) # 执行结果:
# [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
列表生成式,使用[],括号内是for循环语句
示例2:求0-9能被3整除的数字
li = [x for x in range(10) if x % 3 == 0]
print(li) # 执行结果:
# [0, 3, 6, 9]
在这个列表生成式中,不断有for循环,而且还用到了if判断语句
列表生成式的格式:
(1)[元素 for 元素 in 可迭代的类型 ]
(2)[元素 for 元素 in 可迭代的类型 if 元素需要满足的条件]
生成器表达式
还是上面两个例子,使用生成器表达式写出来:
示例1:求0-9每个数的平方
g = (x for x in range(10) if x % 3 == 0) print(g) # generator 这里的g就是一个生成器了,将中括号换成小括号就变成了生成器表达式 for i in g:
print(i) # 执行结果:
# <generator object <genexpr> at 0x00000194C9FA34C0>
# 0
# 3
# 6
# 9
示例2:求0-9能被3整除的数字
g = (x for x in range(10) if x % 3 == 0) print(next(g))
print(next(g))
print(next(g))
print(next(g)) # 执行结果:
# 0
# 3
# 6
# 9
列表生成式和生成器表达式总结:
1. 把列表生成式的中括号换成小括号就是生成器表达式
2. 列表解析与生成器表达式都是一种便利的编程方式,只不过生成器表达式更节省内存
示例3:找到嵌套列表中名字含有两个'e'的所有名字
names = [['Tom', 'Billy', 'Jefferson', 'Andrew', 'Wesley', 'Steven', 'Joe'],
['Alice', 'Jill', 'Ana', 'Wendy', 'Jennifer', 'Sherry', 'Eva']] # for name in names:
# for i in name:
# if i.count('e') == 2:
# print(i) # 如果无法一次写出嵌套的列表生成式,可以先使用for循环写出来
list_name = [x for name in names for x in name if x.count('e') == 2]
print(list_name) # 执行结果:
# ['Jefferson', 'Wesley', 'Steven', 'Jennifer']
字典推导式
示例1:将字典中的key和value对调
# 注意字典推导式中,返回的一定是一个字典类型:mcase[i]:i
dic = {mcase[i]:i for i in mcase}
print(dic) # 执行结果:
# {10: 'a', 34: 'b'}
示例2:合并大小写对应的value值,将k统一成小写
mcase = {'a': 10, 'b': 34, 'A': 7, 'Z': 3}
dic = {k.lower(): mcase.get(k.lower(), 0) + mcase.get(k.upper(), 0) for k in mcase}
print(dic)
# 执行结果:
# {'a': 17, 'b': 34, 'z': 3}
# 这个示例中用到了 get() 这个知识点:
# mcase.get(k.lower(), 0) 当字典mcase中存在k.lower()的时候则直接返回,否则返回默认填写的0
集合推导式
集合数据类型,有自带的去重功能
squared = {x**2 for x in [1, -1, 2]} # 返回 1, 1, 2 集合自带去重的功能
print(squared)
# 执行结果:
# {1, 4}
其他一些示例:
# 例1: 过滤掉长度小于3的字符串列表,并将剩下的转换成大写字母
li = ['a', 'abc', 'c', 'dddd'] l1 = [i.upper() for i in li if len(i) >= 3]
print(l1)
# 例2: 求(x,y)其中x是0-5之间的偶数,y是0-5之间的奇数组成的元祖列表
l1 = [(x, y) for x in range(1, 5) if x%2==0 for y in range(1, 5) if y%3==0]
print(l1)
# 例3: 求M中3,6,9组成的列表M = [[1,2,3],[4,5,6],[7,8,9]]
M = [[1,2,3],[4,5,6],[7,8,9]]
l1 = [i[2] for i in M]
print(l1)
[ python ] 各种推导式的更多相关文章
- Python列表推导式和嵌套的列表推导式
列表推导式提供了一个更简单的创建列表的方法.常见的用法是把某种操作应用于序列或可迭代对象的每个元素上,然后使用其结果来创建列表,或者通过满足某些特定条件元素来创建子序列. 例如,假设我们想创建一个平方 ...
- python的推导式 —— 列表推导式、集合和字典推导式
python的推导式是用于快速处理数据的方法. 主要有:列表推导式.集合推导式和字典推导式 import time import numpy as np 列表推导式: 1. 速度快 t1 = time ...
- python字典推导式 - python基础入门(17)
在昨天的文章中,我们介绍了关于python列表推导式 的使用,字典推导式使用方法其实也类似,也是通过循环和条件判断表达式配合使用,不同的是字典推导式返回值是一个字典,所以整个表达式需要写在{}内部. ...
- python 列表推导式 - python基础入门(16)
截止到目前为止,python基础内容已经学习了50%左右,在学习编程过程中,我们不仅要学习python语法,同时也需要学习如何把自己代码写的更美观,效率更高. 一.什么是推导式 推导式是从一个或者多个 ...
- python列表推导式详解
推导式是Python中很强大的.很受欢迎的特性,具有语言简洁,简化代码,速度快等优点.推导式包括:1.列表推导式2.字典推导式3.集合推导式4.嵌套列表推导式注意: 字典和集合推导是最近才加入到Pyt ...
- Python之推导式、生成器表达式
l = [i for i in range(10)] print(l) l1 = ['选项%s'%i for i in range(10)] print(l1) 1.把列表解析的[]换成()得到的就是 ...
- python列表推导式详解 列表推导式详解 字典推导式 详解 集合推导式详解 嵌套列表推导式详解
推导式是Python中很强大的.很受欢迎的特性,具有语言简洁,简化代码,速度快等优点.推导式包括:1.列表推导式2.字典推导式3.集合推导式4.嵌套列表推导式注意: 字典和集合推导是最近才加入到Pyt ...
- Python生成器/推导式/生成器表达式
一 生成器 生成器的本质就是迭代器 生成器的特点和迭代器一样,取值方式和迭代器一样(__next__(), send(): 给上一个yield传值) 生成器一般由生成器函数或者生成器表达式来创 ...
- python各种推导式分析
推导式comprehensions(又称解析式),是Python的一种独有特性.推导式是可以从一个数据序列构建另一个新的数据序列的结构体. 共有三种推导,在Python2和3中都有支持: 列表(lis ...
- Python——生成器&推导式
生成器 生成器的本质就是迭代器,那么还为什么有生成器呢,两者唯一的不同就是迭代器都是Python给你提供能够的已经写好的工具或者通过数据转化得来的.而生成器是需要我们自己用Python代码构建的工具. ...
随机推荐
- 关于Centos的yum安装LAMP
Step1.配置网易的源 在mirrors.163.com中找到centos的帮助信息,完成源的更新配置,如图1,图2,图3所示. 图1 图2 图3 Step2.然后安装PHP+MySQL+apach ...
- Hadoop1.2.1异常No route to host
Hadoop1.2.1异常Bad connect ack with firstBadLink (No route to host ) 0.说明 Hadoop集群之前运行正常,增加了新节点之后,需要执行 ...
- 导入(移动)数据到hive1.1.0表的方法
hive数据导入代码格式(会移动源文件位置): LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename [partit ...
- python函数:字符串函数示例
优先掌握的操作 #作用:名字,性别,国籍,地址等描述信息 #定义:在单引号\双引号\三引号内,由一串字符组成 name='egon' #优先掌握的操作: #1.按索引取值(正向取+反向取) :只能取 ...
- 驱动之NandFlash的介绍与应用20170209
本文主要介绍的是NAND FLASH的介绍与应用,直接看个人笔记即可:
- oracle 插入每年每天数据
create or replace procedure PROC_P_ABC is v_sumday ; i ; v_calendar_date number :=null; v_day number ...
- 形态学及其他集合运算(Morphological and Other Set Operations)
摘 要:本实验主要实现形态学图像处理.主要验证图像集合的交并补运算.膨胀和腐蚀处理并利用图像集合的运算,实现形态学边界抽取算法并进行特征边界抽取.同时将膨胀和腐蚀扩展至灰度图像,编写函数实现灰度 ...
- Linux上调试core文件(Good)
coredump文件 什么是coredump? 通常情况下coredmp包含了程序运行时的内存,寄存器状态,堆栈指针,内存管理信息等.可以理解为把程序工作的当前状态存储成一个文件.许多程序和操作系统出 ...
- 微信小程序传值
方式一:通过设置id方式传值 <button class="btninvest" bindtap="goinvet" id="{{item.tx ...
- Arrays.asList方法遇到的问题
在使用Arrays.asList(T...a)方法时,遇到了 java.lang.UnsupportedOperationException 异常. 后来发现,该方法返回的类型是Arrays$Arr ...