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. UI自动化学习笔记- 日志相关操作

    一.日志相关 1.日志 概念:日志就是用于记录系统运行时的信息,对一个事件的记录,也称log 1.1 日志的作用 调试程序 了解系统程序运行的情况,是否正常 系统程序运行故障分析与问题定位 用来做用户 ...

  2. YsoSerial 工具常用Payload分析之Common-Collections2、4(五)

    前言 Common-Collections <= 3.2.1 对应与YsoSerial为CC1.3.5.6.7 ,Commno-collections4.0对应与CC2.4. 这篇文章结束官方原 ...

  3. ctf每周一练

    buuctf  misc: 你猜我是个啥 下载之后,是一个zip文件,解压,提示不是解压文件 放进HxD中进行分析,发现这是一个png文件,改后缀 打开后,发现是一张二维码,我们尝试用CQR进行扫描, ...

  4. C++ //继承中构造和析构顺序

    1 #include <iostream> 2 #include <string> 3 using namespace std; 4 5 class Base 6 { 7 pu ...

  5. Android Jetpack 架构组件最佳实践之“网抑云”APP

    背景 近几年,Android 相关的新技术层出不穷.往往这个技术还没学完,下一个新技术又出来了.很多人都是一脸黑人问号? 不少开发者甚至开始哀嚎:"求求你们别再创造新技术了,我们学不动了!& ...

  6. 大学同学做Java开发比我多5K,八年老Android只会crud该转Java吗?

    最近在网上看到这样一个帖子: 做了八年Android开发,感觉这块做着也挺没意思,日常工作就是做一些架构优化,质量数据监控,改一改构建脚本,最主要的是业务负责人没有一个是做客户端的,都是后端的人. 最 ...

  7. Kotlin强化实战!这份学习手册让你的面试稳如泰山

    一.引言 正如官网的slogan所描述:kotlin,是一门让程序员写代码时更有幸福的现代语言. 同时,也正如维基百科里介绍: JetBrains公司希望Kotlin能够推动IntelliJ IDEA ...

  8. git命令行or图形化界面?看这篇操作就够了

    我们在自己的私人分支开发好各自的模块后,就要合并到master,这个时候在idea里边先切换到master,然后update一下获取最新更新,解决一下冲突,最后再合并自己的私人分支,add,commi ...

  9. Linux统计文本中某个字符串出现的次数

    常用的有如下两种方式: 1.VIM 用vim打开文件,然后输入: :%s/hello//gn 如下图: 图中的例子就是统计文本中"hello"字符串出现的次数 说明: %s/pat ...

  10. MySQL-14-备份恢复

    备份类型 1 热备 在业务正常时,对数据库进行备份数据,并且能够一致性恢复(只能是innodb) 对业务影响非常小 2 温备 锁表备份,只能查询不能修改(myisam) 影响到写入操作 3 冷备 关闭 ...