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 对编程初学者而言很友好,丰富的第三方库能够给使用者带来很大 ...
随机推荐
- 微信JSSDK的使用步骤
步骤一:绑定域名 先登录微信公众平台进入"公众号设置"的"功能设置"里填写"JS接口安全域名".(登录后可在"开发者中心" ...
- QML用Instantiator动态创建顶级窗口
关键点 使用Model驱动Instantiator QML里面的hashmap: QQmlPropertyMap 上一次说到用 QQmlApplicationEngine 多次load的方式创建多个一 ...
- noip模拟33[进阶啦啦啦]
noip模拟33 solutions 不知道该咋说,这场考试其实是我这三四场以来最最最最最顺心的一场了 为啥呢?因为我这回思考有很多结果,得到了脑袋的回复 就是你想了半个小时就有了一点点头绪,那感觉就 ...
- python语法入门
程序=数据+功能 我们学习编程语言的目的是为了控制计算机能够像人一样去做事 所以说,编程语言中出现的所有的语法都是为了控制计算机能够像人一样去做xxx事 一.注释: 1 ...
- 本以为精通Android事件分发机制,没想到被面试官问懵了
文章中出现的源码均基于8.0 前言 事件分发机制不仅仅是核心知识点更是难点,并且还是View的一大难题滑动冲突解决方法的理论基础,因此掌握好View的事件分发机制是十分重要的. 一.基本认识 1. 事 ...
- JavaGUI画笔工具的使用
JavaGUI画笔工具的使用 package GUI; import java.awt.*; public class TestPaint { public static void main(Stri ...
- kong整合Cosul实践(3)
1. 准备工作: 需要.netcore或者java程序一套,引入consul第三方包 我这里搭建了一个.netcore的webapi项目,引入Consul第三方包,网上可查资料一堆 环境需要kong, ...
- Use w3m as Web Browser
Installation: apt-get install w3m. use "a" to input text, "tab" to jump between ...
- spring security整体流程
spring-security原理 图片中各个类的作用: 1JwtUser类:实现Springsecurity的UserDetails类,此类必须有三个属性 private String userna ...
- DVWA靶场之XSS(Reflected)通关
反射型xss Low: <?php header ("X-XSS-Protection: 0"); // Is there any input? if( array_key_ ...