Discuss / Python / 学习学习

学习学习

Topic source
L = [1]
while True:
    yield L
    L = [1]+[L[i]+L[i+1] for i in range(len(L)-1)]+[1]

求学者号

#2 Created at ... [Delete] [Delete and Lock User]

厉害

第二行不应该是[1]+[L[0]+L[1]]+[1]=[1]+[1]+[1]=[111]么?

求学者号

#4 Created at ... [Delete] [Delete and Lock User]

当然不是 for循环的list 在第二行那里是空 因为是range(len(L) - 1) 等价于 range(len([1]) - 1) 等价于 range(0) 得到的是 [] 遍历就进不去 所以只有头尾的 [1] + [1]

谢谢,再问一下。 print出来的,是对yield出来的L的迭代么? 为什么输出的格式是[1,2,1]这样的,不是 1 2 1 感觉对python内部机制完全是不理解。。。。。 L=[1]+生成式+[1],出来的肯定还是list 然后yield L,就变成了generator object? 如果这个对象其实是个list,迭代它,输出的就是list?

这个真的厉害 对于python没有一定的了解写不出来

suxlabc

#7 Created at ... [Delete] [Delete and Lock User]

厉害

L = [1]
while True:
    yield L
    L.append(0)
    L = [L[i - 1] + L[i] for i in range(len(L))]

这样写哪里错了?

求学者号

#9 Created at ... [Delete] [Delete and Lock User]

@红莲爆雷刃
当函数中使用了yield之后,函数就成了生成器,可用于迭代; for t in 生成器(): 这里的生成器本身就是可迭代对象, 你可以把它想象成是list,没错你现在迭代的就是list, 每一次迭代都调用了一次next(),取得yield返回的值,并将这个值赋值给t, 你不能因为返回的是list就觉得应该再遍历一次list,这是错误的想法! 另外,[1] + [0] 的结果就是 [1, 0] 这样合并后的效果, 这是py中很方便的地方, php得用array_merge([1], [0])才能做到合并,js中需要 [1].concat([0]) 这样的操作

专程注册微博账号登陆回复,非常感谢,思路很朴实,但是对我有很大的启发,非常非常感谢


  • 1
  • 2

Reply