代码越少,开发效率越高。

高级特性

一、切片(slice)

1、list 的切片

## L 是 0 - 99 的数列
L = list(range(100))
print(L)
print(L[:10])     # 前 10 个数
print(L[-10:])    # 后 10 个数
print(L[10:20])   # 前 11-20 个数:
print(L[:10:2])   # 前 10 个数,每两个取一个
print(L[::5])     # 所有数,每 5 个取一个
print(L[:])       # 原样复制一个 list

输出结果

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[90, 91, 92, 93, 94, 95, 96, 97, 98, 99]
[10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
[0, 2, 4, 6, 8]
[0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99]

2、tuple、字符串的切片

t = (0,1,2,3,4,5)
print(t[:3])
s = 'ABCDEFG'
print(s[:3])
print(s[::2])

输出结果

(0, 1, 2)
ABC
ACEG

二、迭代

Python 中给定一个 list 或 tuple 或其他可迭代的对象(有无下标就可以迭代),通过 for ... in 来遍历,这种遍历称为迭代( Iteration)

1、字典的迭代

dict 的存储不是按照 list 的方式顺序排列,所以,迭代出的结果顺序很可能不一样。

默认情况,dict 迭代的是 key。

d = {'a':1, 'b':2, 'c':3}
for key in d:print(key)## 迭代 values
for value in d.values():print(value)## 同时迭代 key 和 value
for k,v in d.items():print(k,v)

输出结果

a
b
c
1
2
3
a 1
b 2
c 3

2、字符串的迭代

for ch in 'ABC':print(ch)

3、可迭代对象判断

通过 collections 模块的 Iterable 类型判断。

from collections import Iterable
print(isinstance('abc', Iterable))      # str 是否可迭代
print(isinstance([1, 2, 3], Iterable))  # list 是否可迭代
print(isinstance(123, Iterable))        # 整数是否可迭代

输出结果

True
True
False

通过 enumerate 函数可以把一个 list 变成索引-元素对
==》在 for 循环中同时迭代索引和元素本身。

for i, value in enumerate(['A', 'B', 'C']):print(i, value)

输出结果

0 A
1 B
2 C

常用:for 循环里,同时引用了两个变量

for x, y in [(1,1),(2,4),(3,9)]:print(x, y)

输出结果

1 1
2 4
3 9

三、列表生成式( List Comprehensions)

## [1x1, 2x2, 3x3, ..., 10x10]
print([x * x for x in range(1, 11)])
print([x * x for x in range(1, 11) if x % 2 == 0])
## 两层循环
print([m + n for m in 'ABC' for n in 'XYZ'])## 列出当前目录下的所有文件和目录名
import os
# os.listdir 可以列出文件和目录
print([d for d in os.listdir('.')])d = {'x':'A', 'y':'B', 'z':'C'}
print([k + '=' + v for k, v in d.items()])L = ['Hello', 'World', 'IBM', 'Apple']
print([s.lower() for s in L])## 过滤掉非str类型
L1 = ['Hello', 'World', 18, 'Apple', None]
L2 = [s for s in L1 if isinstance(s, str)]
print(L2)

输出结果

[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
[4, 16, 36, 64, 100]
['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']
['1.py', '2.py', '3.py', '4.py']
['x=A', 'y=B', 'z=C']
['hello', 'world', 'ibm', 'apple']
['Hello', 'World', 'Apple']

四、生成器( Generator)

一边循环一边计算的机制,称为生成器。

方法一——()

将列表生成式中 [] 改成 (),使用 for循环 访问元素

g = (x * x for x in range(10))
print(g)
for n in g:print(n)

输出结果

<generator object <genexpr> at 0x0000017EFFAE5D00>
0
1
4
9
16
25
36
49
64
81

==》generator 函数的“调用”实际返回一个 generator 对象

方法二——yield

如果一个函数定义中包含 yield 关键字,则该函数是一个 generator。

以斐波拉契数列( Fibonacci)为例:

def fib(max):n, a, b = 0, 0, 1while n < max:yield ba, b = b, a+bn = n + 1return 'done'
print(fib(6))
## 元素的访问
for n in fib(6):print(n)

输出结果

<generator object fib at 0x000001A8A31EA1A8>
1
1
2
3
5
8

2、Generator 的理解

generator 和函数的执行流程不一样。

  • 函数是顺序执行,遇到 return 语句或者最后一行函数语句就返回。
  • generator 函数,在每次调用 next() 的时候执行,遇到 yield 语句返回,再次执行时从上次返回的 yield 语句处继续执行。

3、杨辉三角形

def triangles():N = [1]while True:yield NN.append(1110)N = [N[i] + N[i-1] for i in range(len(N))]
n = 0
for t in triangles():print(t)n = n + 1if n == 10:break

输出结果

[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]

五、迭代器

1、可迭代对象——Iterable

可迭代对象(Iterable):可以直接作用于 for 循环的对象的统称。

包括:集合数据类型,如 list、 tuple、 dict、 set、 str 等; generator,包括生成器和带 yield 的 generator function。

判断是否是 Iterable 对象

isinstance()函数来判断

from collections import Iterable
print(isinstance([], Iterable))
print(isinstance({}, Iterable))
print(isinstance('abc', Iterable))
print(isinstance((x for x in range(10)),Iterable))
print(isinstance(100, Iterable))

输出结果

True
True
True
True
False

2、迭代器——Iterator

生成器不仅可用于 for 循环,也可被 next() 函数不断调用并返回下一个值,直到最后越界抛出 StopIteration 错误表示无法继续返回下一个值为止。
==》next()函数调用并不断返回下一个值的对象称为迭代器。

判断是否是 Iterable 对象

isinstance()函数来判断

from collections import Iterator
print(isinstance([], Iterator))
print(isinstance({}, Iterator))
print(isinstance('abc', Iterator))
print(isinstance((x for x in range(10)),Iterator))

输出结果

False
False
False
True

3、Iterable vs. Iterator

生成器既是 Iterable 又是 Iterator 对象
但 list、 dict、 str 虽然是 Iterable,却不是 Iterator。

转换:Iterable ==》Iteraor 用 iter() 函数

print(isinstance(iter([]), Iterator))
print(isinstance(iter({}), Iterator))
print(isinstance(iter('abc'), Iterator))

输出结果

True
True
True
思考:为什么 list、 dict、 str 等数据类型不是 Iterator?

这是因为 Python 的 Iterator 对象表示的是一个数据流, Iterator 对象可以被 next()函数调用并不断返回下一个数据,直到没有数据时抛出 StopIteration 错误。可以把这个数据流看做是一个有序序列,但我们却不能提前知道序列的长度,只能不断通过 next()函数实现按需计算下一个数据,所以 Iterator 的计算是惰性的,只有在需要返回下一个数据时它才会计算。
Iterator 甚至可以表示一个无限大的数据流,例如全体自然数。而使用list 是永远不可能存储全体自然数的。

【Python】编程笔记4相关推荐

  1. Python 常用线型 + 点符号 + 颜色汇总 ∈ Python 编程笔记

    文章目录 Part.I 线型 Chap.I 基本线型 Chap.II 元组线型 Part.II 点符号 Chap.I 基本符号 Chap.II 高级符号 Part.III 颜色 Chap.I 单词或字 ...

  2. Python编程笔记6字典

    Python编程学习笔记,第6记:数据结构之字典           本节将学习:能够将相关信息关联起来的Python字典.如何定义字典.如何使用存储在字典中的信息.如何访问和修改字典中的元素.如何遍 ...

  3. Python编程笔记

    Table of Contents 1. 绪论 2. python编程概述 2.1. 知识点 2.2. 良好的编程习惯 2.3. 常见编程错误 2.4. 测试和调试提示 2.5. 移植性提示 3. 控 ...

  4. 《Python学习笔记》——南溪的python编程笔记

    1 致谢 感谢张轩老师分享的关于函数式编程的博文! 1 前言 Python中使用函数式编程也是很重要的: 2 函数 (对于函数编写的原则,我们参考了网易云音乐大前端团队的博文网易云音乐大前端团队--& ...

  5. Python 编程笔记(本人出品,必属精品)

    文章目录 Part.I 准备工作 Chap.I 下载安装 Chap.II 实现快捷键清屏 Chap.III 概念汇编 & 注意事项 Part.II 基础知识 Chap.I 快应用 Chap.I ...

  6. python编程注释_自学python编程笔记之:python的注释

    python中有两种注释: 看以下程序示例(未使用注释): 看以下程序示例(使用注释): 一.注释的作用: 增加程序的可读性,让开发者或后续接手程序进行维护修改的程序员提供可读性. 好的程序代码通常有 ...

  7. Python编程笔记(第三篇)【补充】三元运算、文件处理、检测文件编码、递归、斐波那契数列、名称空间、作用域、生成器...

    一.三元运算 三元运算又称三目运算,是对简单的条件语句的简写,如: 简单条件处理: if 条件成立:val = 1else:val = 2 改成三元运算 val = 1 if 条件成立 else 2 ...

  8. python 编程笔记

    不要老把代码全写一个文件,尽量模块化,分布式处理. 不要怕麻烦,代码啰嗦甚至重复都不是当前需要解决的问题,当前最主要的功能是实现功能.

  9. python编程题-python编程题库

    广告关闭 腾讯云双11爆品提前享,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高满返5000元! 上期题目连接:1000道python题库系列分享十一(9道)上期题目答案:? 本期 ...

  10. python程序设计题库-python编程题库

    广告关闭 2017年12月,云+社区对外发布,从最开始的技术博客到现在拥有多个社区产品.未来,我们一起乘风破浪,创造无限可能. 上期题目连接:1000道python题库系列分享十一(9道)上期题目答案 ...

最新文章

  1. Atitit. atiJavaExConverter4js  新的特性
  2. https协议及与http协议的比较
  3. android view padding,记一次tablayout的tabView偷偷自带padding的问题
  4. APPStore 审核收集
  5. Python编程专属骚技巧10
  6. aspnet core 2.1中使用jwt从原理到精通一
  7. 让我们一起Go(九)
  8. python 打开exe获取窗口句柄_使用Python快速启动多个PC客户端
  9. c语言输出数字菱形北京理工大学,C语言程序的设计—北京理工大学MOOC提交作业.docx...
  10. Jmeter接口测试实战分享,你一定要知道的问题总结!
  11. Python爬取百度搜索风云榜实时热点.
  12. linux man指令问题
  13. 计算机网络运输层两种服务,计算机网络体系结构及协议之运输层
  14. Endnotex7无法保存修改后的格式
  15. WPF剪切板问题-OpenClipboard HRESULT:0x800401D0 (CLIPBRD_E_CANT_OPEN))
  16. java的诞生詹姆斯·高斯林
  17. ps界面为啥突然变大了_PS修图教程,如何把把照片变得更有质感
  18. 系统流程图,数据流程图和Ipo图的介绍
  19. 混沌工程:分布式系统稳定性的“疫苗”
  20. iOS vs Android 系统架构

热门文章

  1. Mabatis 源码探究(2)Java 获取mybatis-config.xml的输入流 inputStream对象
  2. linux通过ftp自动上传文件到服务器,Linux系统通过FTP上传文件到云服务器
  3. android x86一键安装,安卓
  4. 树和二叉树的转换代码python_python数据结构之二叉树的统计与转换实例
  5. python时间模块哪个好arrow模块_python库: arrow (时间)
  6. python周志_Python学习周志—第一周(入门知识)
  7. python速成一小时_Python学习|一小时快速入门python(一)
  8. css中属性兼容性写法,CSS3兼容属性和标准属性的书写顺序
  9. python简单算法题_python几道简单的算法题
  10. 如果服务器开机显示NObootable,电脑不能开机提示No bootable device怎么办?