Python序列的推导式实现代码
作者:繁华似锦Fighting 发布时间:2022-04-24 05:53:46
推导式comprehensions
(又称解析式),是Python的一种独有特性。
推导式是可以从一个数据序列构建另一个新的数据序列(的一种结构体)。
Python中共有三种推导,在Python2和3中都有支持:
列表推导式
字典推导式
集合推导式
1、列表推导式
作用:用一个表达式创建一个有规律的列表或控制一个有规律列表。
列表推导式又叫列表生成式。
(1)快速体验
需求:创建一个0-10的列表。
while
循环实现
# 1. 准备一个空列表
list1 = []
# 2. 书写循环,依次追加数字到空列表list1中
i = 0
while i < 10:
list1.append(i)
i += 1
# 结果:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(list1)
for
循环实现
list1 = []
for i in range(10):
list1.append(i)
# 结果:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(list1)
列表推导式实现
"""
因为是列表推导式,所以等号右边的表达式要用[]括起来
因为最终要返回一个列表。
在推导式中,读与写都从for循环开始,
for的左侧是一个返回值,一次for循环返回的数值。
for每一次遍历,都向列表中添加一个i变量。
"""
# 结果:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
list1 = [i for i in range(10)]
print(list1)
列表推导式就是化简代码,创建或控制有规律的列表。
(2)带if的列表推导式
需求:创建0-10的偶数列表
方法一:通过range()
步长实现
# 结果:[0, 2, 4, 6, 8]
list1 = [i for i in range(0, 10, 2)]
print(list1)
方法二:通过if
实现
# 1. for循环加if 创建有规律的列表
list2 = []
for i in range(10):
if i % 2 == 0:
list2.append(i)
# 结果:[0, 2, 4, 6, 8]
print(list2)
# 2.把for循环配合if的代码 改写 带if的列表推导式
list1 = [i for i in range(10) if i % 2 == 0]
# 结果:[0, 2, 4, 6, 8]
print(list1)
(3)多个for循环实现列表推导式
需求,创建列表如下:
[(1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]
代码如下:
list1 = [(i, j) for i in range(1, 3) for j in range(3)]
print(list1)
# 推导过程如下
# 多for的列表推导式等同于for循环嵌套
# [(1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]
# 数据1 : 1 和 2 range(1,3)
# 数据2 :0 1 2 range(3)
list1 = []
for i in range(1, 3):
for j in range(3):
# 列表里面追加元组: 循环前准备一个空列表,
# 然后这里追加元组数据到列表
list1.append((i, j))
print(list1)
# 多个for实现列表推导式
list2 = [(i, j) for i in range(1, 3) for j in range(3)]
print(list2)
2、字典推导式
思考:如果有如下两个列表:
list1 = ['name', 'age', 'gender']
list2 = ['Tom', 20, 'man']
如何快速合并为一个字典?
答:用for
循环拼接可以实现,但是我们可以通过改写for
循环,变成一个字典推导式。
字典推导式作用:快速合并列表为字典或提取字典中目标数据。
通过下面示例快速体验字典推导式。
(1)创建一个字典
字典key
是1-5数字,value
是这个数字的2次方。
# dict1 = {k: v for i in range(1, 5)}
dict1 = {i: i**2 for i in range(1, 5)}
print(dict1) # {1: 1, 2: 4, 3: 9, 4: 16}
{i:i**2}
表示的是一个字典,key
是i
,value
是i**2
。
最后要返回一个字典,所以右边表达式的最外层是一个大括号。
(2)将两个列表合并为一个字典
list1 = ['name', 'age', 'gender']
list2 = ['Tom', 20, 'man']
dict1 = {list1[i]: list2[i] for i in range(len(list1))}
print(dict1)
# 结果:{'name': 'Tom', 'age': 20, 'gender': 'man'}
总结:
如果两个列表数据个数相同,
len
统计任何一个列表的长度都可以。如果两个列表数据个数不同,
len
统计数据多的列表数据个数会报错;len
统计数据少的列表数据个数不会报错。(这点一定要注意)
(3)提取字典中目标数据
counts = {'MBP': 268, 'HP': 125, 'DELL': 201, 'Lenovo': 199, 'acer': 99}
# 需求:提取上述电脑数量大于等于200的字典数据
count1 = {key: value for key, value in counts.items() if value >= 200}
print(count1) # {'MBP': 268, 'DELL': 201}
3、集合推导式
集合推导式比上面两个推导式使用的频率要少很多。
需求:创建一个集合,数据为下方列表的2次方。
list1 = [1, 1, 2]
代码如下:
list1 = [1, 1, 2]
set1 = {i ** 2 for i in list1}
print(set1) # {1, 4}
注意:集合有数据去重功能。
4、补充提示
我们如何查看Python中关于序列的相关文档:
打开文件找到序列部分文档
[The Python Standard Library(Python标准库)] —> 右边页面[Sequence Type]
Common Sequence Operations
下的列表为序列的通用操作。就是可变序列和不可变序列都可以用的方法或者函数。
Mutable Sequence Types
下的列表为可变序列可以用的方法或者函数。
来源:https://www.cnblogs.com/liuyuelinfighting/p/14993281.html
猜你喜欢
- 表单在提交前我们通常会用客户端JS对其内容进行验证,通常都是写一个函数然后在onsumbit事件中调用,如下:<html><
- 1 新建类库MyTestDLL2 右击项目“MyTestDLL”-》属性-》生成-》勾选“为COM互操作注册”3 打开 AssemblyIn
- 可以实现,下面我们就来做一个检测一个字符串在另一个字符串当中出现几次的函数:入口参数:TheChar="要检测的字符串"
- 用采集程序的优点有:无须维护网站,因为采集程序中的数据来自其他网站,它将随着该网站的更新而更新;可以节省服务器资源,一般采集程序就几个文件,
- Google网站管理员工具的验证方式有两种,一个是通过html文件,或一种是通过meta标签。通常情况下,这两个方式直接就可以通过验证了。但
- 问题你想对在Unix系统上面运行的程序设置内存或CPU的使用限制。解决方案resource 模块能同时执行这两个任务。例如,要限制CPU时间
- 问题:如果一个网站拥有两个域名:domain1.com和domain2.com。在网站运营前期,主推domain1.com,但发展到中期,由
- MySQL使用环境变量TMPDIR的值作为保存临时文件的目录的路径名。如果未设置TMPDIR,MySQL将使用系统的默认值,通常为/tmp、
- 昨天在做mergeCSS的时候遇到两个正则匹配的问题,也花了不少的时间,最后在CSS森林群的 CE 同学帮助下,才完成了这俩正则,特别记录下
- 在asp中获取当前的地址栏网址很简单,使用下面这句语句即能实现获取网站域名Request.ServerVariables("HTT
- 这次我主要讲解如何用Python基于Flask的登录和注册,验证方式采用Basic Auth 主要用以下库import os#Flask的基
- 原文地址:30 Days of Mootools 1.2 Tutorials - Day 2 - Selectors如果你还没有准备好,请先
- 数据处理在现代企业运营中变得越来越重要,越来越关键,甚至会成为企业发展的一项瓶颈. 数据保护的重要性也不言而喻. 如果一个企业没有很好的数据
- 内容摘要:现在博客很流行,相信应该上网时间稍微长点的朋友都会在这或者在那的有一个自己的博客。对于一些有一定能力的朋友,可能更喜欢自己去下载一
- 匿名函数什么是匿名函数用一句话表达只有返回值的函数就是匿名函数。匿名函数只用来实现一些简单的函数功能,所以追求代码的简洁和高效。使用关键字
- 密码强度是一个很普遍的功能,比较简单,主要是怎么制定这个强度规则。现在需要升级密码强度的验证,以前的验证比较简单,现在已经不能满足需求了,现
- 1. ORACLE 的解析器按照从右到左的顺序处理 FROM 子句中的表名,因此 FROM 子句中写在最后的表(基础表 driving ta
- 一、dict推导式list1 = ['name', 'age', 'gender']list
- 分享一个 * 真网页拾色器(调色板),颜色丰富216色,使用方便。运行截图:<html id="container"
- 记住:这时候08安装的时候要自定义一个实例 比如:mysql2008(不能在使用默认实例了) sql server 2008 express