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 reducefungsi, yang merupakan implementasi dari lipatan, persis seperti di atas, namun, saya diberitahu bahwa cara pemrograman 'pythonic' adalah untuk menghindari lambdaistilah 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 reducefungsinya, atau reducecara 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 listuntuk membuatnya konstan dalam hal memori.
sumtidak cukup baik?