2010-02-05 17 views
0

我經常發現自己需要將一系列一元函數應用於一系列相同長度的函數。我的第一個想法是去map(),但是這隻需要一個單一的功能應用於序列中的所有項目。使用一系列一元函數轉換iterable項目

例如,在下面的代碼中,我希望將str.upper()應用到第一個項目,並將int應用到每個a中的第二個項目。 「transform」是我之後效果的佔位符。

COLS = tuple([transform((str.upper, int), a.split(",")) for a in "pid,5 user,8 program,28 dev,10 sent,9 received,15".split()]) 

是否有一些標準庫或其他很好的實現可以執行如此整齊的轉換?

+1

沒有什麼不好這個問題的,但我會揮霍和購買一個額外的行代碼爲此。將第1行的記錄和字段拆分,在第2行完成整理。換句話說,您選擇的因素並不是我所選擇的。 – 2010-02-05 09:25:11

回答

3

怎麼樣...:

​​
+0

其實它的確如此 – 2010-02-05 03:12:50

1
>>> s="pid,5 user,8 program,28 dev,10 sent,9 received,15".split() 
>>> [ (m.upper(),int(n)) for m, n in [i.split(",") for i in s ] ] 
[('PID', 5), ('USER', 8), ('PROGRAM', 28), ('DEV', 10), ('SENT', 9), ('RECEIVED', 15)] 
1

我目前使用這樣的:

def transform(unaries, iterable): 
    return map(lambda a, b: a(b), unaries, iterable) 
+0

這與Alex Martelli的答案有什麼關係,這看起來有點簡單嗎? – 2010-02-05 03:17:05

相關問題