Python学习-高级特性

声明

  本文是对廖雪峰教程学习所记笔记,原文链接如下
  - https://www.liaoxuefeng.com/wiki/1016959663602400/1017269965565856

切片

切片的常见用法如下所示:

前提,存在list L或者是tuple L

形式意义
L[0:3]取索引为0、1、2的元素
L[:3]取索引从0开始,到2为止的元素
L[3:]取索引从3开始,一直到list的最后一个元素(包括最后一个元素)
L[-3:-1]取从倒数第三个元素开始(包括倒数第三个元素),到最后一个元素为止(不包括最后一个元素)的元素
L[:-3]取从第一个元素开始(包括),到倒数第三个元素为止(不包括倒数第三个元素)的元素
L[-3:]取从倒数第三个元素开始(包括),到最后一个元素为止(包括)的元素
L[0:10:2]索引从0到9的数,每隔2个取一个
L[:]取所有数
L[::2]对所有数,每隔2个取一个

扩展

  • 可以直接在list或者tuple之后跟切片,例如:(0, 1, 2, 3, 4, 5)[:3]
  • 字符串可以当做list使用切片,例如:== ‘ABCDEFG’[:3]==

迭代(iteration)

使用for ... in ...:实现,不仅可以用于list、tuple,还可用于其他的可迭代对象,即使其没有下标,例如dict。

d = {'a': 1, 'b': 2, 'c': 3}
for key in d:
    print('%s : %d' %(key,d[key]))

for value in d.values():
    print(value)

for k,v in d.items():
    print(k,v)
    

运行结果如下:

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

判断是否可迭代

通过collections模块的Iterable进行判断
如下所示:

from collections.abc import Iterable
print(isinstance('ABC',Iterable))
print(isinstance(123,Iterable))
#结果:
#True
#False

列表生成式

格式生成列表
list(range(10))[0,1,…,9]
list(range(1,10))[1,2,3,…,9]
[ x*x for x in range(1,10) ][1,4,9,…,81]
[ x*x for x in range(1,10) ][1,4,9,…,81]
[ x*x for x in range(1,10) if x%2==0][4,16,36,64]
[ m+n for m in ‘ABC’ for n in ‘abc’][‘Aa’,‘Ab’,‘Ac’,‘Ba’,‘Bb’,‘Bc’,‘Ca’,‘Cb’,‘Cc’]
L=['hE','She'] [s.lower() for s in L][‘he’,‘she’]

举例:

L1 = ['Hello', 'World', 18, 'Apple', None]
print([s.lower() for s in L1 if isinstance(s,str)])
#结果
#['hello', 'world', 'apple']

生成器(generator)

过列表生成式,我们可以直接创建一个列表。但是,受到内存限制,列表容量肯定是有限的。
不必创建完整的list,从而节省大量的空间。在Python中,这种一边循环一边计算的机制,称为生成器:generator。

创建生成器的方法:

  • 将列表生成式中的[ ]改为( )
  • 使用yield,函数是顺序执行,遇到return语句或者最后一行函数语句就返回。
    而变成generator的函数,在每次调用next()的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行。

获取生成器的元素:

  • 使用next获取generator的下一个返回值
  • 使用for循环获取generator的值,generator是可迭代对象

普通函数调用返回结果,而generator的函数“调用返回一个generator对象

以下是使用generator生成杨辉三角的示例:

def triangles():
    count=1
    l=[1]
    while True:
        i=1
        yield l
        count = count + 1
        t=l
        l=[]
        l.append(1)
        while i<=(count-2) :
            l.append(t[i]+t[i-1])
            i=i+1
        l.append(1)
    return 'done'


n=0
for t in triangles():
    print(t)
    n=n+1
    if 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]

迭代器(Iterator)

首先明确迭代器Iterator<>Iterable,即list、tuple等都不是Iterator,但是可以用iter()函数将他们转化为Iterator对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值