在python中递归扩展列表

时间:2016-05-03 15:38:41

标签: python list-comprehension

我一直试图让我的代码更加pythonic,并想知道是否有办法以某种方式使这一行。

w=[1, 0, 0, 0, 0, 0, 0, 0] # just an example
for i in range(170):
    w.append(w[-2]^w[-3]^w[-4]^w[-8])

我尝试使用lambda表示法得到了这个,但是对于长度大于50的长度它并不起作用。

[(lambda a:lambda v:a(a,v))(lambda s,x:1 if x==0 else (0 if x < 8 else s(s,x-2)^s(s,x-3)^s(s,x-4)^s(s, x-8)))(k) for k in range(170)]

我也尝试过使用列表进行递归:

(lambda n: (lambda f, n: f(f, n))(lambda f, n: f(f, n-1)+[f(f, n-1)[-2]^f(f, n-1)[-3]^f(f, n-1)[-4]^f(f, n-1)[-8]] if n > 0 else [1,0,0,0,0,0,0,0], n))(20)

我认为其中任何一个都适用于memoization,但我不知道如果可能的话如何进行内联。

1 个答案:

答案 0 :(得分:0)

我认为你拥有的很好,但也许可以把它变成像:

这样的生成器
def running_xor(w, n):
    for i in range(n):
        yield w[-2]^w[-3]^w[-4]^w[-8]

w.extend(running_xor(w, 170))