Discuss / Python / 之前不知道可以直接加号连接list,学到了

之前不知道可以直接加号连接list,学到了

Topic source

这个L=[0]+L+[0]是什么骚操作真的没看懂

想明白了,卧槽,前后加0占位,进入循环的时候就是上一个结果的LIST的第一个和第二个相加就是0+1,牛逼牛逼

prefect ,最完美最简洁写法

第二层开始相当于

0   1   1    0

 \  /  \ /  \ /

 1   2    1

所以楼组在第二层开始list两头补上0,用生成取 当前和当前+1 个list 元素得到生成新list 的元素,

len(L)-1 生成器生成结果list 比两端补0 后的新list的少一个;

我也想写这样没写出来

沧海奇迹1

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

L = [0] + L + [0]是[0,1,0]

L = [L[i] + L[i + 1] for i in range(len(L) - 1)]计算的时候,总是使用[0,1,0]作为开头和结尾的1的运算(0+1,1+0)

不得不说这个算法牛逼了!

飞行泰坦

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

不过得稍微改改,while 1死循环,运行的时候发现卡在函数这里都不输出了

step1:给L赋初值L=[1];

step2:执行L=[0]+L+[0],此时L=[0,1,0];

step3:由上可知,此时len(L)=3,执行L = [L[i] + L[i + 1] for i in range(2)],L=[1,1];

对比step1和step3,step2的作用就是在原来L的值的两端加上[0],进而实现每一个list的两端都为1,这也就是答主说的,用加号可以直接list。

容易理解

牛逼爆了,另外弱问一句 1就是代替 True吗?我把1改成True,改成2、3、4,改成not 0

都能执行?那这样的话以后用1代替True少打3个字母哦!

绝了

# -*- coding: utf-8 -*-

def triangles():
    L = [1]
    yield L 
    while 1:
        yield L
        L = [0] + L + [0]
        L = [L[i] + L[i + 1] for i in range(len(L) - 1)]

按照遇到 yield 就返回,下次再进入到这个地方继续的,在 While 前面加 1 个 yield 第一次调用的时候应该不影响才对,为什么加上一个 yield,第一次 print 打出的是 None 呢???


Reply