切片:
这是对list,tuple和字符串的截取的方式:
l = ['Michael', 'Sarah', 'Tracy', 'Bob', 'Jack']
切片用法:
取前n (= 3)个:
a = l[:3]
['Michael', 'Sarah', 'Tracy']
取后n (= 3)个:
a = l[-3:]
['Tracy', 'Bob', 'Jack']
取n = 2到m=4:
a = l[2:5]
['Tracy', 'Bob', 'Jack']
每隔n = 2取一个:
a = l[::2]
['Michael', 'Tracy', 'Jack']
直接复制一个:
a = l[:]
迭代:
用法和swift一样
列表生成器:
要生成一个1...10的list可以用list(range(1, 11))
若要生成[1x1, 2x2, 3x3, ..., 10x10]
这样的list
[x * x for x in range(1, 11)]
也可以加判断:
[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。由于内存限制,列表容量肯定是有限的,所以,我们很多时候只需要知道创建list的方法,不需要直接生成一个list。
创建生成器:
g = (x * x for x in range(10))
g
<generator object <genexpr> at 0x1022ef630>
除此之外还可以通过函数创建
def fib(max):
n, a, b = 0, 0, 1
while n < max:
yield b
a, b = b, a + b
n = n + 1
return 'done'
难理解的就是generator和函数的执行流程不一样。函数是顺序执行,遇到return语句或者最后一行函数语句就返回。而变成generator的函数,在每次调用next()的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行。
网友评论