Apa cara paling idiomatis untuk mencapai sesuatu seperti berikut ini, di Haskell:
foldl (+) 0 [1,2,3,4,5]
--> 15
Atau yang setara di Ruby:
[1,2,3,4,5].inject(0) {|m,x| m + x}
#> 15
Jelas, Python menyediakan reduce
fungsi, yang merupakan implementasi dari lipatan, persis seperti di atas, namun, saya diberitahu bahwa cara pemrograman 'pythonic' adalah untuk menghindari lambda
istilah dan fungsi tingkat tinggi, lebih memilih pemahaman daftar jika memungkinkan. Oleh karena itu, apakah ada cara yang disukai untuk melipat daftar, atau struktur seperti daftar di Python yang bukan reduce
fungsinya, atau reduce
cara idiomatik untuk mencapai ini?
sum
, Anda mungkin ingin memberikan beberapa jenis contoh yang berbeda.
sum()
sebenarnya menyediakan fungsionalitas terbatas dengan ini. sum([[a], [b, c, d], [e, f]], [])
kembali [a, b, c, d, e, f]
misalnya.
+
daftar adalah operasi waktu linier baik dalam waktu maupun memori, membuat seluruh panggilan menjadi kuadrat. Penggunaannya list(itertools.chain.from_iterable([a], [b,c,d],[e,f],[]])
linier secara keseluruhan - dan jika Anda hanya perlu mengulanginya satu kali, Anda dapat menghentikan panggilan list
untuk membuatnya konstan dalam hal memori.
sum
tidak cukup baik?