Python'da kullanışlı reduce
işlevini biliyorsunuz. döndürürreducelist: azaltma ama ara sonuç listesini verme gibi
reduce(lambda x,y: x+y, [1,2,3,4], 0)
(((0 + 1) +2) +3) +: Örneğin, (built-in sum yokmuş gibi davranılırsa) şöyle bir liste özetlemek için kullanabilirsiniz 4 = 10.
Şimdi ara meblağların bir listesini nasıl istersem? Bu durumda, [1,3,6,10]
.
İşte çirkin bir çözüm. Daha pythonic bir şey var mı?
def reducelist(f, l, x):
out = [x]
prev = x
for i in l:
prev = f(prev, i)
out.append(prev)
return out
FYI, en azından Haskell'de bu, * scan * olarak bilinir. Azaltmak, fonksiyonel programlama dünyasında da (belirli bir tür) * katlama * olarak bilinir. – delnan
Teşekkürler delnan, bunu Mathematica'dan FoldList olarak biliyorum. Mathematica, "Liste" eklenmesiyle belirtilen bu fonksiyonel programlama fonksiyonlarının çoğunun biriken bir versiyonuna sahiptir. Python 3'te reducelist dediğim şeyin şu anda birikim() olarak kullanılabileceğine dair cevabı görüyorum. – dreeves