[ 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代码构建的工具. ...
随机推荐
- 【MediaElement】WPF视频播放器【2】
一.前言 上回说到需要做放视频的使用向导,这两天公司里的老司机一直帮我答疑解惑,让这个任务变得挺顺的,真心感谢他们! 这次与[1]中的不同之处在于: (1)播放和暂停按钮集成在<Me ...
- BZOJ3524 & LOJ2432:[POI2014]代理商Couriers——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=3524 https://loj.ac/problem/2432 给一个长度为n的序列a.1≤a[i] ...
- 基于线程池技术的web服务器
前言:首先简单模拟一个场景,前端有一个输入框,有一个按钮,点击这个按钮可以实现搜索输入框中的相关的文本和图片(类似于百度.谷歌搜索).看似一个简单的功能,后端处理也不难,前端发起一个请求,后端接受到这 ...
- 【DP】【CF855C】 Helga Hufflepuff's Cup
Description 给你一个树,可以染 \(m\) 个颜色,定义一个特殊颜色 \(k\) , 要求保证整棵树上特殊颜色的个数不超过 \(x\) 个.同时,如果一个节点是特殊颜色,那么它的相邻节点的 ...
- bundle adjustment原理(1)转载
转自菠菜僵尸 http://www.cnblogs.com/shepherd2015/p/5848430.html bundle adjustment原理(1) 那些光束平差的工具,比如SBA.SSB ...
- c++构造是否要加大括号
笔者被这个问题困扰良久,终于下决心看个究竟.废话不多说,先上结论: 如果对象是原生类型,加大括号会保证生成对象被初始化(一般是0) 如果对象非原生类型,加大括号或者不加,效果是一样的,都会执行该类的默 ...
- WIFI Direct(Wi-Fi P2P)
Wi-Fi Direct技术是Wi-Fi产业链向蓝牙技术发起的挑战,它试图完全取代蓝牙 Wi-Fi Direct是一种点对点连接技术,它可以在两台station之间直接建立tcp/ip链接,并不需要A ...
- 「HTML5」url、href、src区别
一.URL的概念 统一资源定位符(或称统一资源定位器/定位地址.URL地址等,英语:Uniform Resource Locator,常缩写为URL),有时也被俗称为网页地址(网址).如同在网络上的门 ...
- Creating a Cron Job in K8S
Creating a Cron Job Cron jobs require a config file. This example cron job config .spec file prints ...
- Css Sprite 图片等比缩放图片大小
图片大小80*40,即每张图片大小40*40,如何以20*20显示图片?1. 首先看下如何以40*40显示第二张图片: 正常显示css代码 .sprite { background-image: ur ...