2010-03-16 45 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

相关问题