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 对编程初学者而言很友好,丰富的第三方库能够给使用者带来很大 ...
随机推荐
- ;~ 并发运行的AutoHotkey脚本真机实际测试模板参考20191010.ahk
;~ 并发运行的AutoHotkey脚本真机实际测试模板参考20191010.ahk;~ 2019年10月10日;~ 徐晓亮(aahk6188);~ 操作系统测试环境: Windows 7 专业版 3 ...
- linux对拍
转自 hzoi-fengwu :https://www.cnblogs.com/hzoi-fengwu/p/14872962.html 1 #include<bits/stdc++.h> ...
- Python - 函数实战
前言 参考的是慕课网提供的实战,自己编码 http://www.imooc.com/wiki/pythonlesson1/function2.html 什么是模块化程序设计 在进行程序设计时将一个大程 ...
- NTP\rsync+inotify
NTP网络时间协议 NTP(Network Time Protocol)网络时间协议基于UDP,用于网络时间同步的协议,使网络中的计算机时钟同步到UTC(世界统一时间),再配合各个时区的偏移调整就能实 ...
- 运行第一个程序!hello world!
第一个程序:1 //打印 hello world 2 3 #include <stdio.h> 4 int main() 5 { 6 printf("hello world!\n ...
- Python正则表达式re库的初次使用入门
正则表达式常用操作符: 操作符 说明 实例 . 表示任何单个字符,不包括换行符 [] 字符集,对单个字符给出取值范围 [abc]表示a.b.c,[a-z]表示a到z单个字符 [^ ] 非字符集 [^a ...
- 了解cookie和storage的区别及优缺点
共同点:用于数据的存储. 区别: 1.是否需要添加到http请求头? HTTP Cookie(cookie):在客户端存储会话信息,要求服务器对任意HTTP请求发送set-cookie HTTP头作为 ...
- SSM集成FastJson
FastJson Json数据格式回顾 什么是json JSON:(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式.它基于 ECMAScript( ...
- 成为编程大牛很简单,把这些书看个八成就OK
原文链接:http://lucida.me/blog/developer-reading-list/ 本文把程序员所需掌握的关键知识总结为三大类19个关键概念,然后给出了掌握每个关键概念所需的入门书籍 ...
- linux 磁盘IO速度测试
写入速度测试命令:time dd oflag=direct if=/dev/zero of=/data2/test bs=2k count=1000000 //if表示从哪里读取 of表示写入到哪里 ...