[ 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代码构建的工具. ...
随机推荐
- Going in Cycle!! UVA - 11090(二分+判断环路 )
题意: 给定一个n个点m条边的加权有向图,求平均权值最小的回路 解析: 首先肯定是想到找出环路 然后..呵..呵..呵呵... 显然不现实!! 二分大法好 ....去猜结果 然后带入验证 ...真是 ...
- 使用Unity5.1进行VR开发的配置(最新的未必是最好的!!!)
随着Unity5.1的发布,之前的Oculus Rift和Gear VR 开发流程发生了巨大的变化,这也算是小白鼠们必须付出的代价了~ 那么Unity5.1和Oculus的整合究竟发生了哪些变化,对开 ...
- bzoj2213: [Poi2011]Difference(思维题)
今天颓了一天T T 这题有两种写法... ①预处理出每种字符在原字符串中的位置,枚举两种字符作为最大值和最小值,把这两种字符的坐标归并排序,把最大值设为1,最小值设为-1,求最大子段和.注意因为 ...
- 【recording】gdoi2018
怎么说..虽然感觉其实..不太想写游记.. 但是回来看着桌面上的课本还是忍不住了(想想班里进度就..qwq)还是写一下吧 Day x(x<0) 之前大家溜到首都开心集训了一波然后被虐的很开心.. ...
- 「Python-Django」Django中使用数据库的 9 个小技巧
Django 中使用数据库的 9 个小技巧. 1. 过滤器聚合 在 Django 2.0 之前,如果你想得到“用户总数”.“活跃用户总数”等信息时,你不得不使用条件表达式. Django 2.0 中, ...
- Hadoop 遇到的问题集
1. Mac 使用ssh命令无法成功 ssh localhost,但是可以ssh其他的 可能原因:ssh服务未启动 解决方法: 1.启动sshd服务: sudo launchctl load -w / ...
- HTML跳转
<!DOCTYPE html><HTML><HEAD> <TITLE> HolyMirror </TITLE> <meta http- ...
- Eclipse错误笔记!
1.ERROR: JDWP Unable to get JNI 1.2 environment, jvm->GetEnv() return code = -2 JDWP exit error ...
- CCPC2018-A-Buy and Resell
Problem Description The Power Cube is used as a stash of Exotic Power. There are n cities numbered 1 ...
- 「七天自制PHP框架」应用:JSON生成器
刚刚开始学做一个WebAPP,数据查询的一般套路是通过一张PHP页面读取数据库,获得列表后“嵌写”在PHP页面中,虽然写法上丑陋至极,但也有“快糙猛”出效果的成就感,如图. 后来想想,不对啊,难道以后 ...