2010-03-16 88 views
1

考慮我有一個元素數組,其中我想創建一個新的'iterable',每個下一個應用一個自定義'轉換'。在python 2.x下做這件事的正確方法是什麼?如何將一個函數應用於一組元素

對於熟悉Java的人來說,相當於來自谷歌集合框架的Iterables#轉換。

確定作爲一個虛設例如

Iterable<Foo> foos = Iterables.transform(strings, new Function<String, Foo>() 
    { 
     public Foo apply(String string) { 
     return new Foo(string); 
     } 
    }); 


//use foos below 
+0

一些具體的例子會很有用。 –

回答

5

(從Java推出)生成表達式:

(foobar(x) for x in S) 
+0

+1用於指示Python中序列的懶惰評估轉換的慣用方式。 –

1

或通過使用map():這樣做的

def foo(x): 
    return x**x 

for y in map(foo,S): 
    bar(y) 

# for simple functions, lambda's are applicable as well 
for y in map(lambda x: x**x,S): 
    bar(y) 
+2

請注意,問題是要求懶惰評估; genexp更合適。不降低投票率,因爲這是一個有效的(但熱切評估)的選擇。也就是說,即使是熱切的評價,列表理解也許會更加習慣。 –

+0

你是對的,我錯過了最初的意圖。我爲了完整性而將它留在這裏。 –

3

的另一種方式:

from itertools import imap 
my_generator = imap(my_function, my_iterable) 

這就是我自己做的方式,但我有點奇怪,因爲我其實就像map

+0

不要爲使用Python的功能方面的罪惡感而感到不快! – tzot

相關問題