Python学习笔记(三):高级特性

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Nidhoggz/article/details/78323471

切片

Slice,取指定索引范围的操作

L=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]

L[0:3]

获取02

L[:3]

获取02

L[10:20]

获取1019

L[-1:]

获取最后一个元素

L[-3:]

获取最后三个元素

L[::5]

所有数,每5个取一个

L[:10:2]

10个数,每两个取一个

L[:]

复制整个list

tuplestr都可以使用切片

(0,1,2,3,4,5,6,7,8,9)[:3] 

'ABCDEFGH'[0:5]

迭代

Iteration,遍历,通过for…in来完成,for…in不止可以用在listtuple上,还可以用在其他可迭代对象上。

d={'a':1,'b':2,'c':3}

for key in d:

print(key)

for value in d.values():

print(value)

for k,v in d.items():

print(k,v)

判断对象是否可以迭代,通过collection模块的Iterable类型判断

from collection import Iterable

isinstance('abc',Iterable)   True

isinstance([1,2,3],Iterable)   True

isinstance(123,Iterable)   False

Python内置的enumerate可以把一个list变成索引-元素对

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

print(i,value)

所有的可迭代对象都可以使用for循环,包括自己定义的类型

列表生成式

List Comprehensions

[x*x for x in range(1,11)]

[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

 

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

 

import os

[d for d in os.listdir('.')]

['DLLs', 'Doc', 'include', 'Lib', 'libs', 'LICENSE.txt', 'NEWS.txt','python.exe', 'python3.dll', 'python36.dll', 'pythonw.exe', 'Scripts', 'tcl','Tools', 'vcruntime140.dll', 'workspace']

 

L = ['Hello', 'World', 'IBM', 'Apple']

[s.lower() for s in L]

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

 

L1 = ['Hello', 'World', 18, 'Apple', None]

L2=[s.lower() for s in L1 if isinstance(s,str)]

print(L2)

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

生成器

generator,可以一边循环一边计算的机制,Python中可以通过列表生成式改成generator,也可以通过函数来实现复杂逻辑的generator

通过将列表生成器[]改变成()来创建一个generator

g=(xfor x in range(1,20))

通过函数来创建generator,如果一个函数包含yield关键字,这个函数就不再是一个普通函数,而是一个generator。变成generator的函数与普通函数执行流程不同,每次调用next()执行,遇到yield语句返回,下一次从上次返回的yield语句继续执行

deffib(max):

    n, a, b = 0, 0, 1

    while n < max:

        yield b

        a, b = b, a + b

        n = n + 1

    return 'done'

generator可以使用next()来获取generator的下一个返回值

next(g)

generator也可以使用for循环来迭代它

for n in g:

print(n)

要想拿到generator的返回值,要先捕获StopIteration错误,返回值包括在stopIterationvalue里面。

while True:

try:

x=next(g)

print('g',x)

except StopIteration as e:

print('Generator return value:',e.value)

break

迭代器

凡是可以用for循环的对象都是Iterable类型

凡是可用作next()函数的对象都是Iterator类型,它们代表一个惰性计算的序列

集合数据类型如listdictstr等是Iterable但不是Iterator,不过可以通过iter()函数来获得一个Iterator对象

for循环本质上是通过不断调用next()函数来实现的

猜你喜欢

转载自blog.csdn.net/Nidhoggz/article/details/78323471