廖雪峰Python教程学习笔记三-高级特性

1 切片

语法形式:L[start:stop:step]
start 和 stop 是列表下标,包含 start 下标的元素,不包含 stop 下标的元素(左闭右开),step 是步进,即每次取元素的步长,默认值是 1。
e.g.

>>> L = ['Michael', 'Sarah', 'Tracy', 'Bob', 'Jack']
>>> L[0:3]
['Michael', 'Sarah', 'Tracy']
>>> L[-2:]
['Bob', 'Jack']
>>> L = range(100)
>>> L
[0, 1, 2, 3, ..., 99]
>>> L[:10:2]
[0, 2, 4, 6, 8]

2 迭代

如果给定一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历我们称为迭代(Iteration)。

  • Python的for循环不仅可以用在list或tuple上,还可以作用在其他可迭代对象上,如dict
  • 默认情况下,dict迭代的是key。如果要迭代value,可以用for value in
    d.itervalues(),
    如果要同时迭代key和value,可以用for k, v in d.iteritems()。
  • 任何可迭代对象都可以作用于for循环,包括我们自定义的数据类型,只要符合迭代条件,就可以使用for循环。

3 列表生成式

列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式。
要生成[1x1, 2x2, 3x3, ..., 10x10],方法一是循环,另一种更简单的方法便是用用列表生成式生成,如下:

>>> [x * x for x in range(1, 11)] #for循环后面还可以加上if判断条件进行限制
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

还可以使用两层循环生成全排列:

>>> [m + n for m in 'ABC' for n in 'XYZ']
['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']

运用列表生成式,可以快速生成list,可以通过一个list推导出另一个list,而代码却十分简洁。

4 生成器

在Python中,为了生成大型列表时节省内存空间,采用一边循环一边计算的机制,称为生成器(Generator)。
产生生成器一般有两种方法:

1.第一种方法很简单,只要把一个列表生成式的[]改成(),就创建了一个generator:

>>> L = [x * x for x in range(10)]
>>> L
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
>>> g = (x * x for x in range(10))
>>> g
<generator object <genexpr> at 0x104feab40>

generator保存的是算法,可以使用next()方法计算得到每一个元素,但更常用的是使用for循环,因为generator也是可迭代对象:

>>> g = (x * x for x in range(10))
>>> for n in g:
...     print n
...
0
1
4
9
16
25
36
49
64
81

2. 定义generator的另一种方法是在定义时用yield返回结果。

generator和函数的执行流程不一样。函数是顺序执行,遇到return语句或者最后一行函数语句就返回。而变成generator的函数,在每次调用next()的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行(有点像函数中断)。
e.g.

>>> def odd():
...     print 'step 1'
...     yield 1
...     print 'step 2'
...     yield 3
...     print 'step 3'
...     yield 5
...
>>> o = odd()
>>> o.next()
step 1
1
>>> o.next()
step 2
3
>>> o.next()
step 3
5
>>> o.next()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
StopIteration #执行3次yield后,已经没有yield可以执行了,所以,第4次调用next()就报错。

要理解generator的工作原理,它是在for循环的过程中不断计算出下一个元素,并在适当的条件结束for循环。对于函数改成的generator来说,遇到return语句或者执行到函数体最后一行语句,就是结束generator的指令,for循环随之结束。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值