Python 高级特性(3)- 列表生成式
range() 函数
日常工作中,range() 应该非常熟悉了,它可以生成一个迭代对象,然后可以使用 list() 将它转成一个 list
# 判断是不是迭代对象
print(isinstance(range(0, 10), Iterable)) # 生成列表
lists = list(range(0, 10))
print(lists) # 输出结果
True
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
range 详解
https://www.cnblogs.com/poloyy/p/15086994.html
具体更多的栗子
for i in range(5):
print(i) for i in range(10, 15):
print(i) for i in range(5, 25, 5):
print(i)
运行结果
0
1
2
3
4 10
11
12
13
14 5
10
15
20
前置知识
for 循环:https://www.cnblogs.com/poloyy/p/15087053.html
if 语句: https://www.cnblogs.com/poloyy/p/15087130.html
列表生成式前置知识
- 但如果要生成 [1x1, 2x2, 3x3, ..., 10x10] 怎么做?
- 当你不会列表生成式前就是用循环
res = []
for i in range(11):
res.append(i * i)
print(res) # 输出结果
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
但很明显繁琐了很多
列表生成式
针对上面的问题,列表生成式一句代码即可完成
res = [i * i for i in range(11)]
print(res) # 输出结果
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
列表生成式:带 if
# 筛选偶数
res = [i * i for i in range(11) if i % 2 == 0]
print(res) # 输出结果
[0, 4, 16, 36, 64, 100]
等价写法
res = []
for i in range(11):
if i % 2 == 0:
res.append(i * i)
列表生成式:双重循环
res = [i + j for i in range(5) for j in range(6, 11)]
print(res) # 输出结果
[6, 7, 8, 9, 10, 7, 8, 9, 10, 11, 8, 9, 10, 11, 12, 9, 10, 11, 12, 13, 10, 11, 12, 13, 14]
等价写法
res = []
for i in range(5):
for j in range(6, 11):
res.append(i + j)
列表生成式:多个变量
d = {'x': 'A', 'y': 'B', 'z': 'C'}
res = [(k, v) for k, v in d.items()]
print(res)
# 输出结果
[('x', 'A'), ('y', 'B'), ('z', 'C')]
等价写法
d = {'x': 'A', 'y': 'B', 'z': 'C'}
res = []
for k, v in d.items():
res.append((k, v))
列表生成式:包含函数
L = ['Hello', 'World', 'IBM', 'Apple']
res = [s.lower() for s in L]
print(res) # 输出结果
['hello', 'world', 'ibm', 'apple']
列表生成式:包含 if...else
错误写法一
res = [i * i for i in range(11) if i % 2 == 0 else 0]
print(res) # 报错信息
res = [i * i for i in range(11) if i % 2 == 0 else 0]
^
SyntaxError: invalid syntax
- pycharm 也会直接提示语法错误
- 因为跟在 for 后面的 if 是一个筛选条件,不能带 else
错误写法二
res = [i if i % 2 == 0 for i in range(11)]
print(res) # 报错信息
res = [i if i % 2 == 0 for i in range(11)]
^
SyntaxError: invalid syntax
for 前面是一个表达式,它需要有个表达式计算结果,只有 if 是不完整的,需要有 else
正确写法
res = [i if i % 2 == 0 else "奇数" for i in range(11)]
print(res) # 输出结果
[0, '奇数', 2, '奇数', 4, '奇数', 6, '奇数', 8, '奇数', 10]
将 if ... else 放在前面写
Python 高级特性(3)- 列表生成式的更多相关文章
- Python高级特性:列表生成式
列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式. 最常见的例子: 生成list [, , , , , , , , , ]可以用li ...
- python高级特征:列表生成式;generator, 迭代器。
Python高级特性 列表生成式:不过一种语法糖 生成器:不过一个方法 迭代器: 列表生成式 Python内置的函数,来创建list. 简单的生成: >>> list(range(1 ...
- Python学习札记(十七) 高级特性3 列表生成式
参考:列表生成式 Note 1.List Comprehensions,即列表生成式,是Python中内置的非常强大的list生成式. eg.生成一个列表:[1*1, 2*2, ..., 10*10] ...
- python高级特性:切片/迭代/列表生成式/生成器
廖雪峰老师的教程上学来的,地址:python高级特性 下面以几个具体示例演示用法: 一.切片 1.1 利用切片实现trim def trim(s): while s[:1] == " &qu ...
- Python高级特性:Python迭代、生成器、列表生成式
迭代 给定一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历称为迭代(Iteration). 在java和C语言中,迭代是通过循环list的下标来完成的,Pyth ...
- 三、python高级特性(切片、迭代、列表生成器、生成器)
1.python高级特性 1.1切片 list列表 L=['Mli','add','sal','saoo','Lkkl'] L[0:3] #即为['Mli','add','sal'] 从索引0开始 ...
- Python 高级特性介绍 - 迭代的99种姿势 与协程
Python 高级特性介绍 - 迭代的99种姿势 与协程 引言 写这个笔记记录一下一点点收获 测试环境版本: Python 3.7.4 (default, Sep 28 2019, 16:39:19) ...
- python高级特性和高阶函数
python高级特性 1.集合的推导式 列表推导式,使用一句表达式构造一个新列表,可包含过滤.转换等操作. 语法:[exp for item in collection if codition] if ...
- Python高级特性(3): Classes和Metaclasses(转)
原文:Python高级特性(3): Classes和Metaclasses 类和对象 类和函数一样都是Python中的对象.当一个类定义完成之后,Python将创建一个“类对象”并将其赋值给一个同名变 ...
- Python高级特性(1):Iterators、Generators和itertools(转)
译文:Python高级特性(1):Iterators.Generators和itertools [译注]:作为一门动态脚本语言,Python 对编程初学者而言很友好,丰富的第三方库能够给使用者带来很大 ...
随机推荐
- djinn靶机
仅供个人娱乐 靶机信息 https://download.vulnhub.com/djinn/djinn.ova 一.主机探测 二.漏洞的查找和利用 21端口ftp 匿名登录 7331端口 命令执行 ...
- 大数据学习(10)—— Hive进阶
前面提到了Hive的知识点非常零散,我不知道该怎么把这些知识点分类,跟SQL关系没那么大的就放在这一篇吧. Hive Serde 参考Hive Serde Serde是啥 Serde是序列化和反序列化 ...
- ListPopupWindow和Popupwindow的阴影相关问题demo总结
Popupwindow: 优点:可以通过setBackgroundDrawable()来重新设置阴影. 缺点:当AnchorView是可移动的,比如移动到屏幕的左右边界.左下角.右下角时,Popupw ...
- 微信小程序测试点
一.测试范围 1.权限测试 需要检查以下几种情况下微信用户访问的权限 1)未授权微信登录小程序 未授权时,一般使用一些业务功能的时候,都会弹出提醒:先授权再操作对应功能.or在提交数据到后台的时候,会 ...
- Spring Cloud Aliaba - Ribbon
Ribbon(有关介绍见RestTemplate末尾) Ribbon负载均衡实现策略 Ribbon负载均衡实现策略通过接口IRule进行实现,默认使用ZoneAvoidanceRule规则进行负载均衡 ...
- Map的putAll方法验证
下面的程序验证了Map的putAll方法的行为特性,代码如下: import java.util.HashMap; public class Map_putAllTest { public stati ...
- React Native 启动流程简析
导读:本文以 react-native-cli 创建的示例工程(安卓部分)为例,分析 React Native 的启动流程. 工程创建步骤可以参考官网.本文所分析 React Native 版本为 v ...
- KNeighborsClassifier()的参数无效错误
KNeighborsClassifier()的参数无效错误 写在前面:如果对自己英语拼写很自信,可以不用往下看了,我就是拼写错误 错误提示 Invalid parameter n_neightbors ...
- SpringBoot开发二十三-统一记录日志
统一记录日志 AlphaAspect package com.nowcoder.community.aspect; import org.aspectj.lang.ProceedingJoinPoin ...
- IDM-下载工具
下载所需要的工具 1.IDM下载地址 链接:https://pan.baidu.com/s/1bHXA0pUYBOAC5f_2Iqvl_g 提取码:lsha 2.IDM破解包下载地址 链接:https ...