我一直在试图让我的代码更pythonic,并想知道是否有办法以某种方式使这一行。在Python中递归地扩展列表
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])
我试图用拉姆达符号,得到了这一点,但它并不适用于长度大于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一起使用,但我不确定如何尽可能地以内联方式进行操作。
你到底做的,到底是什么? – timgeb
第一个版本更清晰,*方式*更具可读性。使它成为单线程将*不*使它更pythonic - 它会让它变得一团糟... – alfasin
@timgeb我试图计算一个哈希算法圆常数 –