Ich habe versucht, meinen Code pythonischer zu machen, und fragte mich, ob es eine Möglichkeit gibt, diese Zeile irgendwie zu machen.Eine Liste in Python rekursiv erweitern
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])
Ich habe versucht, Lambda-Notation und bekam dies zu verwenden, aber es für Längen funktioniert nicht größer als etwa 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)]
Ich habe auch versucht mit Listen Rekursion:
(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)
Ich würde mir vorstellen, dass beide mit Memoization funktionieren würden, aber ich bin mir nicht sicher, wie das inline zu tun ist, wenn es überhaupt möglich ist.
Was Sie, genau das zu tun versuchen? – timgeb
Die erste Version ist klarer und * way * besser lesbar. Wenn man es zu einem One-Liner macht, wird es nicht pythonischer - es wird ein Durcheinander machen ... – alfasin
@timgeb Ich versuche eine runde Konstante für einen Hash-Algorithmus zu berechnen –