Python入门 17-10

mac2024-01-29  36

Python入门 17-10

这就是我的wonderland 。

笔记部分

列表生成器

举例

list(range(1, 11)) [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

L = [] for x in range(1, 11): … L.append(x * x) … L [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

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

d = {‘x’: ‘A’, ‘y’: ‘B’, ‘z’: ‘C’ } [k + ‘=’ + v for k, v in d.items()] [‘y=B’, ‘x=A’, ‘z=C’]

生成器

列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢?这样就不必创建完整的list,从而节省大量的空间。在Python中,这种一边循环一边计算的机制,称为生成器:generator。 要创建一个generator,有很多种方法。第一种方法很简单,只要把一个列表生成式的[]改成(),就创建了一个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 at 0x1022ef630>

如果要一个一个打印出来,可以通过next()函数获得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

用generator写一个斐波那契数列

def fib(max): n, a, b = 0, 0, 1 while n < max: print(b) a, b = b, a + b n = n + 1 return ‘done’

最新回复(0)