【笔记】Python学习(廖雪峰)笔记②——Python高阶

Python高阶

切片Slice

List

L[num1:num2] 从num1开始索引,直到索引num2结束(不包括num2)

L[:n] 从0开始,直到n结束(不包括n)

L[-n:] or L[-n1:-n2] 倒数取数,倒数第一个元素的索引是 -1

L[num1:num2:internal]num1num2 ,每 internal 取一个

L[:] 复制list

tuple

操作的结果仍然是tuple

>>>(0,1,2,3,4,5)[:3]
(0,1,2)

string

字符串可以看成是一种list,每个元素就是一个字符,操作结果仍是字符串

>>>'ABCDEFG'[:3]
'ABC'
>>>'ABCDEFG'[::2]
'ACEG'

迭代

使用for循环进行遍历

for … in …

作用范围:

dict

for key in dict 迭代key(由于 dict 不是顺序排列,迭代结果顺序可能不一样)

for value in dict.values() 迭代 value

for k,v in dict.items() 同时迭代 key 和 value

字符串 for ch in str

判断是否可迭代:collections.abc 模拟的 Iterable 类型实现

>>>from collection.abcs import Iterable
>>>isinstance('abc',Iterable)
True

下标循环:enumerate函数 将一个list 变成索引-元素对

for i,value in enumerate(['a','b','c']):
    print(i,value)

同时引用两个变量

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

列表生成式 List Comprehensions

#生成 1*1,2*2,……,10*10的list
>>>[x * x for x in range(1,11)]
[1,4,9,16,25,36,49,64,81,100]
#for循环后可以加入if判断
>>>[x * x for x in range(1,11) if x % 2 == 0]
[4,16,36,64,100]
#可以使用两层循环
>>>[m + n for m in 'ABC' for n in 'XYZ']
['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']
#使用两个变量生成list
>>> d = {'x': 'A', 'y': 'B', 'z': 'C' }
>>> [k + '=' + v for k, v in d.items()]
['y=B', 'x=A', 'z=C']
#将list中的所有字符串变成小写
>>> L = ['Hello', 'World', 'IBM', 'Apple']
>>> [s.lower() for s in L]
['hello', 'world', 'ibm', 'apple']

注意:for 前面的 if-else 是表达式,for 后面的 if 是过滤条件,不能有else

生成器 Generator

一边循环,一边计算,从而不必创建完整的list,以节省大量空间

generator 保存的是算法,直到计算到最后一个元素,没有更多的元素时,抛出StopIteration的错误

创建方法①:

列表生成式的 [] 变成 () g = (x*x for x in range(10))

获取元素:next(g) 或者 for循环,generator是可迭代对象

创建方法②:

函数定义中包含 yield 关键字,那么这个函数就是一个generator函数,调用generator函数将返回一个generator;多次调用generator函数会创建多个相互独立的generator

generator函数的执行流程:调用 next() 时执行,遇到 yield 语句返回,再次执行时从上次返回的 yield 语句处继续执行

迭代器

可迭代对象——Iterable

集合数据类型:list、tuple、dict、set、str……

生成器:generator、generator function

判断: isinstance(obj,Interable) 用于判断一个对象是否是Iterable对象

迭代器

可以被 next() 函数调用并不断返回下一个值的对象称为迭代器,Iterator

直到没有数据时抛出 StopIteration 错误

迭代器表示的是一个数据流,可以将该数据流看作是一个有序序列,但并不知道序列的长度,只能通过不断地 next() 函数实现按需计算下一个数据

Iterator 的计算是惰性的

Iterator 可以表示一个无限大的数据流,例如全体自然数

判断: isinstance(obj,Interator) 用于判断一个对象是否是Iterator对象

Compare

生成器都是 Iterator

list、dict、str是Iterable(可迭代对象),但并不是 Iterator(迭代器)

iter(list) 使用 iter() 函数可以将 Iterable 转变成 Iterator

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值