前言

养成一个好的习惯只需要坚持21天,Day5

高级特性

  • 切片
  • 迭代
  • 列表生成器
  • 生成器

切片

取一个list和tuple的部分元素可以用切片快速实现。

L为一个list,L[0:3]表示从索引0开始取到索引3为止,但不包括索引3,即索引0,1,2三个元素。
如果第一个索引是0,还可以省略为L[:3],运行结果和L[0:3]一样。
如果索引从1开始,取出两个元素则可以写作L[1:3],运行结果如下:

由list列表元素的存取可以使用-1作为最后一个元素的索引,这里也支持倒数切片,但要记住倒数第一个元素的索引是-1。

首先创建一个0-99的数列,可以取前10个数、后10个数、前10个数每两个取一个、所有数每隔5个取一个:

字符串也可以看作是一个list,从而进行切片操作。

练习
利用切片操作,实现一个trim()函数,去除字符串首尾的空格,注意不要调用str的strip()方法:

def trim(s):if len(s)==0:return s     while s[0]==' ':s=s[1:]if len(s)==0:return s         while s[-1]==' ':s=s[:-1]if len(s)==0:return s       return s

迭代

如果给定一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历我们称为迭代(Iteration)。Python中,迭代是通过for...in来完成的,只要是可迭代对象,无论有没有下标都可以进行迭代,比如list、dict以及字符串等等。

默认情况下,dict迭代的是key。如果要迭代value,可以用for value in d.values(),如果要同时迭代keyvalue,可以用for k, v in d.items()
如何判断一个对象是否是可迭代对象,可以通过通过collections模块的Iterable类型判断:

Python内置的enumerate函数可以把一个list变成索引-元素对,这样就可以在for循环中同时迭代索引和元素本身:

练习
请使用迭代查找一个list中最小和最大值,并返回一个tuple:

def findMinAndMax(L):if L == []:return(None,None)else:(min,max)=(L[0],L[0])for x in L:if x > max:max = xelif x < min:min = xreturn (min,max)

列表生成式

列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式。灵活运用列表生成式可以大大简化代码实现。
举个栗子,要生成list[1,2,3,4,5,6,7,8,9,10]可以使用list(range(1,11)):

如果要生成[1x1, 2x2, 3x3, ..., 10x10],可以使用列表生成式一句实现:


if...else
例如输出1到10中的偶数:

在一个列表生成式中,for前面的if ... else是表达式,而for后面的if是过滤条件,不能带else。即如果for在if之前,则后面不能加else;如果if在for之前,则后面必须加else。

练习
把list中的字符串变成小写字符串

L1 = ['Hello', 'World', 18, 'Apple', None]
L2 =[s.lower() for s in L1 if isinstance(s, str)]
print(L2)

运行结果:

['hello', 'world', 'apple']

生成器

通过列表生成式,我们可以直接创建一个列表。但是,受到内存限制,列表容量肯定是有限的。在Python中,可以使用生成器:generator实现一边循环一遍计算的机制。
如何创建一个generator呢?
首先把一个列表生成式的[]改成(),就创建了一个generator:

next(g)可以打印出生成器中的元素,直到最后一个。
generator的函数,在每次调用next()的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行。

练习
斐波拉契数列(Fibonacci):1, 1, 2, 3, 5, 8, 13, 21, 34, …

def fib(max):n,a,b = 0,0,1while n<max:print(b)a,b = b,a+bn = n+1

运行示例:

def triangles():L = [1]                                                         while True:yield L                                         L = [L[x]+L[x+1] for x in range(len(L)-1)]       L.insert(0,1)                                   L.append(1)                                  if len(L)>10:                   break
n = 0
results = []
for t in triangles():results.append(t)n = n + 1if n == 10:breakfor t in results:print(t)if results == [[1],[1, 1],[1, 2, 1],[1, 3, 3, 1],[1, 4, 6, 4, 1],[1, 5, 10, 10, 5, 1],[1, 6, 15, 20, 15, 6, 1],[1, 7, 21, 35, 35, 21, 7, 1],[1, 8, 28, 56, 70, 56, 28, 8, 1],[1, 9, 36, 84, 126, 126, 84, 36, 9, 1]
]:print('测试通过!')
else:print('测试失败!')

运行结果:

Python廖雪峰教程学习笔记:Day5相关推荐

  1. python廖雪峰教程 学习笔记

    如何用字符来描述字符: \d匹配数字   digit \w匹配字母或数字  word \s可以匹配空格 space * 表示任意个字符, +表示至少一个字符  ?表示0个或1个字符, {n} 表示n个 ...

  2. Python廖雪峰教程学习笔记:Day4

    前言 养成一个好的习惯只需要坚持21天,Day4 函数 编程中,函数的调用.定义在一定程度上可以简化功能的实现,降低程序的复杂度. 调用函数 Python中内置了许多有用的函数,我们在调用一个内置函数 ...

  3. Python廖雪峰教程学习笔记:Day3

    前言 养成一个好的习惯只需要坚持21天,Day3 条件判断和循环 条件判断与循环在编程实现中都很常见,比如,输入用户的年龄,根据年龄的大小可以打印出不同的内容,该功能的实现可以使用if语句实现: if ...

  4. python 廖学峰教程_python廖雪峰教程 学习笔记

    如何用字符来描述字符: \d匹配数字 digit \w匹配字母或数字 word \s可以匹配空格 space * 表示任意个字符, +表示至少一个字符 ?表示0个或1个字符, {n} 表示n个字符, ...

  5. python廖雪峰教程学习:Day 1

    前言 养成一个好的习惯只需要坚持21天,Day1 输入和输出 输出使用print()函数,使用方法如下: 输入使用input()函数,例如需要用户从电脑输入一些字符,可以让用户输入字符串,并存入到一个 ...

  6. python 廖雪峰_python学习(廖雪峰的官方网站)

    廖雪峰的官方网站. 请注意区分命令行模式和Python交互模式. 在命令行模式下,可以直接运行.py文件. 2运行其实和java运行一样 cd dir 3 print() input() 4数据类型 ...

  7. python机器学习基础教程-学习笔记(一)

    了解 scikit-learn 及其用法是很重要的,但还有其他一些库也可以改善你的编程体验. scikit-learn 是基于 NumPy 和 SciPy 科学计算库的.此外,我们还会用到 panda ...

  8. 廖雪峰Git学习笔记2-时光机穿梭

    基本都是按照廖雪峰老师的重新敲打了一遍,增强记忆,中间穿插了一些自己的理解,新手可能有误,请看原版: https://www.liaoxuefeng.com/wiki/896043488029600/ ...

  9. Python(廖雪峰) 学习笔记(1)

    第一个Python程序 命令行模式和Python交互模式 win+R打开运行然后输入cmd打开命令提示符,这就是命令行模式,在命令行模式下输入python(全是小写),即可进入Python交互模式 在 ...

最新文章

  1. 在SQL Server中保存和输出任意类型的文件
  2. linux 脚本向标准输入,linux中的标准输出和输入
  3. SYSAUX表空间使用率高问题处理
  4. 利用TcpClient TcpListener 实现发送图片
  5. 黄山学院计算机课,黄山学院非计算机类专业计算机课程教学管理规定
  6. 使用环境变量来配置 Teams App 的 manifest
  7. 081212 晴
  8. 二叉树(多路平衡搜索树)-(代码、分析、汇编)
  9. 计算机组装的理论知识,计算机组装基本知识点.ppt
  10. tq2440修改默认串口不支持打印控制台
  11. 使用eventfd唤醒阻塞在select、poll、epoll的IO复用
  12. (day 08 - 先序遍历+判断+递归)剑指 Offer 26. 树的子结构
  13. 易语言之编译后图标模糊的处理方案
  14. imageai的安装和简单使用
  15. python: 集合操作符和关系符号
  16. 【读书笔记】【未】杀死一只知更鸟
  17. 源码解析kafka删除topic
  18. 智能卡java_Java智能卡发送命令
  19. Android Studio中如何隐藏顶部状态栏和标题栏
  20. 快学 Go 语言 第 3 课 —— 分支与循环

热门文章

  1. Tcp连接时三次握手的问题和思考
  2. Fibonacci 数列和 Lucas 数列的性质、推论及其证明
  3. 逆讯图驴企业版,这一次颜值更高
  4. 企业级网络架构: 综合项目和网络升级(NETWORK05----DAY26)
  5. HTML—超文本标记语言
  6. Group Norm,Batch Norm,Layer Norm
  7. 理解js执行的过程:JS运行三部曲
  8. JAVA--equal、length、Arrays、Static
  9. LTE物理传输资源(3)-时频资源
  10. 【2023电赛备赛】使用sysconfig对ccs进行图形化编程