python学习——列表生成器

因为列表生成式会把列表的所有内容计算出来,有时太占内存,所以需要写成列表生成器,列表生成器相当于写出列表的递推公式,需要时可以一步一步的推出我们想要的元素。
比如:
斐波那契数列,其定义就是,第一二位是0和1,后一位等于前两位数字之和,
写成数列就是
{ a 1 = 0 a 2 = 1 a n = a n − 1 + a n − 2 , n > 2 \begin{cases} a_{1}=0\\ a_{2}=1\\ a_{n}=a_{n-1}+a_{n-2}&&&,n>2 \end{cases} a1=0a2=1an=an1+an2,n>2
这就是他的递推公式,生成器即是生成这个递推公式。所以有如下代码:

>>>def fib(max):
    n,a,b=0,0,1
    while n<max:
       yield b
       a,b=b,a+b
       n=n+1
    return 'done'
#调用并运行
>>> for i in fib(6):
	print(i)

	
1
1
2
3
5
8
       
       

再举一个例子,
杨辉三角

            1
          1   1
        1   2   1
      1   3   3    1
    1   4   6   4    1
  1   5   10  10   5    1
            ...

可见第一行是1,第二行多一列,且若将第一行扩充,前后各加一个0,成为(0,1);(1,0),这两个相加即是第二行,以此类推。因此,可有代码:

def yanghuitri(m):
    L=[1]
    n=0                      #初始条件
    while true:
      while n<m:
        yield L
        L=[sum(i) for i in zip(([0]+L]),(L+[0]))]
        n=n+1
      return 'done'
>>> for x in yanghuitri(6):
	print(x)
		
[1]
[1, 1]
[1, 2, 1]
[1, 3, 3, 1]
[1, 4, 6, 4, 1]
[1, 5, 10, 10, 5, 1]

zip函数:zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的对象。具体用法可看这里

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黎明杀鸡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值