小試牛刀 - 算出檔案每一列的總和
今天處理程式的時候,遇到一個很簡單的檔案,長的如下
19 2 1 1 1 6 2 0 0 0 1 2 0 0 0 3 2 0 0 0 3 1 0 0 0 4 2 2 2 2 ...
每一行代表一筆資料,然而,我想要得到每一列的總和。這其實是一個很簡單不過的題目,大一程式設計就可以寫的出來 XD。那麼有趣之處是什麼 XD? 如果我用 Python 來撰寫的話,要怎麼樣才可以寫的很有趣 ?
首先是讀檔,轉換資料成一個 list。我不打算浪費太多時間在寫這個方面,所以我是用暴力法撰寫。
f = open('filename.txt', 'r')
data = [[int(d) for d in l.split()] for l in f.readlines()]
f.close()
這樣子我們可以得到一個 list of list,每一個 element 的 type 皆為 integer,所以問題是,如何得到每一行的縱向總和 ? 直覺方式是雙層迴圈來搞定,這可能是最快也最直接想到的方法,不過我不想要,因為我覺得這實在是不美好 XD。就我的想法是,我當下想到的是 fold, fold list of list to a list. 稍微想了一下,就寫出了下面這行 code
sum_list = reduce(lambda x, y: [u+v for u, v in zip(x,y)], data)
其實用 Haskell 寫會更漂亮 ... 不過我還沒學 monad ... Orz (趕快學!!)
---
臨時筆記 XD
4 則留言:
ruby one linear :p
$stdin.lines.map{ |l| l.split.map(&:to_i) }.transpose.map{ |c| c.inject(&:+) }
matlab(毆)o
My Haskell solution:
import Data.List
main = interact $ intercalate " " . map (show . sum) . transpose . map (map read . words) . lines
fyi. my solution updated at:
http://davidtran.doublegifts.com/blog/?p=167
張貼留言