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)- 列表生成式的更多相关文章

  1. Python高级特性:列表生成式

    列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式. 最常见的例子: 生成list [, , , , , , , , , ]可以用li ...

  2. python高级特征:列表生成式;generator, 迭代器。

    Python高级特性 列表生成式:不过一种语法糖 生成器:不过一个方法 迭代器: 列表生成式 Python内置的函数,来创建list. 简单的生成: >>> list(range(1 ...

  3. Python学习札记(十七) 高级特性3 列表生成式

    参考:列表生成式 Note 1.List Comprehensions,即列表生成式,是Python中内置的非常强大的list生成式. eg.生成一个列表:[1*1, 2*2, ..., 10*10] ...

  4. python高级特性:切片/迭代/列表生成式/生成器

    廖雪峰老师的教程上学来的,地址:python高级特性 下面以几个具体示例演示用法: 一.切片 1.1 利用切片实现trim def trim(s): while s[:1] == " &qu ...

  5. Python高级特性:Python迭代、生成器、列表生成式

    迭代 给定一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历称为迭代(Iteration). 在java和C语言中,迭代是通过循环list的下标来完成的,Pyth ...

  6. 三、python高级特性(切片、迭代、列表生成器、生成器)

    1.python高级特性 1.1切片 list列表 L=['Mli','add','sal','saoo','Lkkl'] L[0:3]  #即为['Mli','add','sal']  从索引0开始 ...

  7. Python 高级特性介绍 - 迭代的99种姿势 与协程

    Python 高级特性介绍 - 迭代的99种姿势 与协程 引言 写这个笔记记录一下一点点收获 测试环境版本: Python 3.7.4 (default, Sep 28 2019, 16:39:19) ...

  8. python高级特性和高阶函数

    python高级特性 1.集合的推导式 列表推导式,使用一句表达式构造一个新列表,可包含过滤.转换等操作. 语法:[exp for item in collection if codition] if ...

  9. Python高级特性(3): Classes和Metaclasses(转)

    原文:Python高级特性(3): Classes和Metaclasses 类和对象 类和函数一样都是Python中的对象.当一个类定义完成之后,Python将创建一个“类对象”并将其赋值给一个同名变 ...

  10. Python高级特性(1):Iterators、Generators和itertools(转)

    译文:Python高级特性(1):Iterators.Generators和itertools [译注]:作为一门动态脚本语言,Python 对编程初学者而言很友好,丰富的第三方库能够给使用者带来很大 ...

随机推荐

  1. Springboot通过拦截器拦截请求信息收集到日志

    1.需求 最近在工作中遇到的一个需求,将请求中的客户端类型.操作系统类型.ip.port.请求方式.URI以及请求参数值收集到日志中,网上找资料说用拦截器拦截所有请求然后收集信息,于是就开始了操作: ...

  2. 《手把手教你》系列技巧篇(十六)-java+ selenium自动化测试-元素定位大法之By xpath下卷(详细教程)

    1.简介 按宏哥计划,本文继续介绍WebDriver关于元素定位大法,这篇介绍定位倒数二个方法:By xpath.xpath 的定位方法, 非常强大.  使用这种方法几乎可以定位到页面上的任意元素. ...

  3. SpringCloud升级之路2020.0.x版-13.UnderTow 核心配置

    本系列代码地址:https://github.com/HashZhang/spring-cloud-scaffold/tree/master/spring-cloud-iiford Undertow ...

  4. 【笔记】偏差方差权衡 Bias Variance Trade off

    偏差方差权衡 Bias Variance Trade off 什么叫偏差,什么叫方差 根据下图来说 偏差可以看作为左下角的图片,意思就是目标为红点,但是没有一个命中,所有的点都偏离了 方差可以看作为右 ...

  5. 零基础学Java之Java学习笔记(四):运算符

    ​ 算术运算符: 算术运算符是对数值类型的变量进行运算的,在 Java 程序中使用的非常多. 运算符 说明 例子 结果 + 加法-相加运算符两侧的值 9+9 18 - 减法-左操作数减去右操作数 10 ...

  6. 003 PCI Express体系结构(三)

    一.PCI总线的存储器读写总线事务 总线的基本任务是实现数据传送,将一组数据从一个设备传送到另一个设备,当然总线也可以将一个设备的数据广播到多个设备.在处理器系统中,这些数据传送都要依赖一定的规则,P ...

  7. 生成二维码项目pom.xml中QRCode依赖报错

    pom.xml报错如下: 解决方法: 1.将QRCode.jar包下载到E盘下 网盘下载地址: 链接:https://pan.baidu.com/s/1sY1NK5ekCkNH0uqraZMnKw 提 ...

  8. 原来一条select语句在MySQL是这样执行的《死磕MySQL系列 一》

    前言 看到蒋老师的第一篇文章后就收货颇丰,真是句句戳中痛点. 令我记忆最深的就是为什么知道了一个个技术点,却还是用不好 ?不管是蒋老师所说的Redis还是本系列要展开学习的MySQL. 这是一个值得思 ...

  9. 综合练习——寻找有潜力的bilibili百大UP主(1)

    寻找有潜力的bilibili百大UP主(1) 防喷说明:以下仅为个人学习之余的娱乐项目,本人不主动赋予以下内容任何价值,不确保内容的准确性 欢迎各位友善的指出错误 目录 寻找有潜力的bilibili百 ...

  10. c++本地动态连接库代码

    c++本地动态连接库代码 1 #pragma once 2 #include "stdafx.h" 3 4 #ifdef PERSON_EXPORTS 5 #define PERS ...