python学习笔记013——推导式
1 推导式简介
推导式comprehensions(又称解析式),是Python的一种独有特性。
推导式是可以从一个数据序列构建另一个新的数据序列的结构体。
推导式有三种形式:
1)列表推导式 (list)
2)字典推导式 (dict)
3)集合推导式 (set)
2 列表推导式
是用可迭代对象生成列表的一种方法
列表推导式是表达式
2.1 基本的列表推导式
语法:
[表达式 for 变量 in 可迭代对象] [表达式 for 变量 in 可迭代对象 if 真值表达式]
示例1:[1,2,3,4,5,6.......,10]
[x for x in range(1, 11)]
或
L = []
for x in range(1, 10001):
L.append(x)
示例2:[1, 4, 9, 16, 25, ...]
[x**2 for x in range(1, 11)]
示例3:[1 3 5 7 .... 99]
[x for x in range(1, 100) if x % 2 == 1]
示例4:生成1000以内的所有素数的列表
def is_prime(x):
"""
判断x是否为素数(或质数)
如果为素数,返回True
"""
if x <= 1:
return False
for i in range(2, x):
if x % i == 0:
return False
return True
L = [x for x in range(1, 10000) if is_prime(x)]
print(L)
示例5:
s1 = "ABC"
s2 = "123"
如何生成以下列表
L = ['A1', 'A2', 'A3', 'B1', 'B2'...]
L = []
for x in s1:
for y in s2:
L.append(x + y)
如何生成以下列表
L = ['A1', 'B2', 'C3']
s1 = 'ABC'
s2 = '
a = []
for i in range(len(s1)):
a.append(s1[i]+s2[i])
print(a)
2.2 嵌套的列表推导式
语法:
[表达式 for 变量1 in 可迭代对象1 if 条件表达式1 for 变量2 in 可迭代对象2 if 条件表达式2 ]
示例1:
s1 = "ABC"
s2 = "123"
如何生成以下列表
L = ['A1', 'A2', 'A3', 'B1', 'B2'...]
s1 = "ABC" s2 = " L = [x + y for x in s1 for y in s2]
3 字典推导式
语法:
{ 键表达式 : 值表达式 for 变量 in 可迭代对象 if 真值表达式 [for 变量 in 可迭代....]}
字典中的用法与列表中的用法类似,将 [ ] 换成 { } 即可
示例1:
生成表达式:{1:"1的平方", 4:"2的平方", 9:'3的平方', ..100:'10的平方'}
d = {x**2 : str(x)+'的平方' for x in range(1, 11)}
示例2:快速更换key和value
mcase = {'a': 1, 'b': 2}
mcase_frequency = {v: k for k, v in mcase.items()}
print(mcase_frequency)
# output {10: 'a', 34: 'b'}
示例3:将字典中大小写a b 键所对应的值合并
mcase = {'a': 10, 'b': 34, 'A': 7, 'Z': 3}
mcase_frequency = {
k.lower(): mcase.get(k.lower(), 0) + mcase.get(k.upper(), 0)
for k in mcase.keys()
if k.lower() in ['a','b']
}
print(mcase_frequency)
# Output: {'a': 17, 'b': 34}
备注: D.get(key, default) 返回键 key 所对应的值,如果没有此键,则返回 default(默认 None)
参考 python的各种推导式(列表推导式、字典推导式、集合推导式)
4 集合推导式
语法:
集合推导式语法:
{ 表达式 for 变量 in 可迭代对象 if 真值表达式 [for 变量 in 可迭代....]}
集合中的用法与列表中的用法类似,将 [ ] 换成 { } 即可
示例1:
squared = {x**2 for x in [1, 1, 2]}
print(squared)
# Output: {1, 4}
注意:集合中具有特有的性质,其元素不能重复
示例2:
生成集合:{1, 8, 27, 4**4... n**n}
s = {x ** x for x in range(1, 10)}
另外还有更为广泛的应用:python的推导式(实用) python-列表推倒式-轻量级循环
python学习笔记013——推导式的更多相关文章
- python学习笔记013——模块
1 模块module 1.1 模块是什么 模块是包含一系列的变量,函数,类等程序组 模块通常是一个文件,以.py结尾 1.2 模块的作用 1. 让一些相关的函数,变量,类等有逻辑的组织在一起,使逻辑更 ...
- python学习笔记013——模块中的私有属性
1 私有属性的使用方式 在python中,没有类似private之类的关键字来声明私有方法或属性.若要声明其私有属性,语法规则为: 属性前加双下划线,属性后不加(双)下划线,如将属性name私有化,则 ...
- python学习笔记013——内置函数dir()
1 描述 dir() 函数 不带参数时,返回当前范围内的变量.方法和定义的类型列表: 带参数时,返回参数的属性.方法列表. 如果参数包含方法__dir__(),该方法将被调用. 如果参数不包含__di ...
- python学习笔记013——包package
1 包(模块包)package 1.1 包的定义 包是将模块以文件夹的组织形式进行分组管理的方法 1.2 作用 分类管理,有利于防止命名冲突 可以在需要时加载一个或部分模块,而不是全部模块 mypac ...
- python基础学习1-列表推导式和字典推导式
#!/usr/bin/env python # -*- coding:utf-8 -*- #列表推导式 取得100内可以被2整除且不能被3整除的数字 a=[i for i in range(100) ...
- Python 学习笔记(下)
Python 学习笔记(下) 这份笔记是我在系统地学习python时记录的,它不能算是一份完整的参考,但里面大都是我觉得比较重要的地方. 目录 Python 学习笔记(下) 函数设计与使用 形参与实参 ...
- Python 学习笔记(上)
Python 学习笔记(上) 这份笔记是我在系统地学习python时记录的,它不能算是一份完整的参考,但里面大都是我觉得比较重要的地方. 目录 Python 学习笔记(上) 基础知识 基本输入输出 模 ...
- python学习笔记--Django入门四 管理站点--二
接上一节 python学习笔记--Django入门四 管理站点 设置字段可选 编辑Book模块在email字段上加上blank=True,指定email字段为可选,代码如下: class Autho ...
- 【Python学习笔记之二】浅谈Python的yield用法
在上篇[Python学习笔记之一]Python关键字及其总结中我提到了yield,本篇文章我将会重点说明yield的用法 在介绍yield前有必要先说明下Python中的迭代器(iterator)和生 ...
随机推荐
- jquery圆角插件
为了实现div的圆角效果,你还在用古老的背景图片拼凑的方法吗?还是在用各种浏览器不互相兼容的CSS方式?如果你还在用这样的方式实现圆角,那我告诉你你真的out了,或许是我out了,竟然以前没发现有这样 ...
- 如何使用动画和精灵表单 Cocos2d-x 2.1.4
本文实践自 Ray Wenderlich.Tony Dahbura 的文章< How to Use Animations and Sprite Sheets in Cocos2D ...
- matlab中help所有函数功能的英文翻译
doc funname 在帮助浏览器中打开帮助文档 help funname 在命令窗口打开帮助文档 helpbrowser 直接打开帮助浏览器 lookfor funname 搜索某个关键字相关函数 ...
- COM结构化存储中存储对象或者流对象的命名规则
COM结构化存储中存储对象或者流对象的命名规则
- M2Mqtt is a MQTT client available for all .Net platform
Introduction M2Mqtt is a MQTT client available for all .Net platform (.Net Framework, .Net Compact F ...
- LuaCURL
LuaCURL:http://luacurl.luaforge.net/ curl大家应该都知道吧,在linux下被广泛使用,也有windows版本,网络上还有其win32版本的源代码.它是一个命令行 ...
- 通过WebRTC实现实时视频通信(二)
通过WebRTC实现实时视频通信(一) 通过WebRTC实现实时视频通信(二) 通过WebRTC实现实时视频通信(三) 在上一篇文章中,我们讲解了WebRTC的概述.历史.安全性和开发者工具.接下来我 ...
- Discuz常见小问题-如何修改favourite图标
1做好一个ico图标之后,直接替换目录下的对应文件即可, 如果没效果刷新浏览器或更新后台CSS缓存.
- spring源代码系列(一)sring源代码编译 spring源代码下载 spring源代码阅读
想对spring框架进行深入的学习一下,看看源码,提升和沉淀下自己,工欲善其事必先利其器,还是先搭建好开发环境吧. 环境搭建 sping源代码之前是svn管理,如今已经迁移到了github中了.新版本 ...
- NSLog格式化输出
/* %@ 对象 %d, %i 整数 %u 无符整形 %f 浮点/双字 %x, %X 二进制整数 %o 八进制整数 %zu size_t %p ...