【发布时间】:2010-10-12 07:19:33
【问题描述】:
如何在 Python 中对集合运行操作并收集结果?
如果我有一个包含 100 个数字的列表,并且我想为每个数字运行一个这样的函数:
Operation ( originalElement, anotherVar ) # returns new number.
并像这样收集结果:
结果 = 另一个列表...
我该怎么做?也许使用 lambdas?
【问题讨论】:
如何在 Python 中对集合运行操作并收集结果?
如果我有一个包含 100 个数字的列表,并且我想为每个数字运行一个这样的函数:
Operation ( originalElement, anotherVar ) # returns new number.
并像这样收集结果:
结果 = 另一个列表...
我该怎么做?也许使用 lambdas?
【问题讨论】:
另一种(有些折旧的)方法是:
定义凯文(v): 返回 v*v
vals = range(0,100)
地图(凯文,瓦尔斯)
【讨论】:
List comprehensions. 在 Python 中它们看起来像:
a = [f(x) for x in bar]
其中 f(x) 是某个函数,bar 是一个序列。
您可以将 f(x) 定义为部分应用的函数,其结构如下:
def foo(x):
return lambda f: f*x
这将返回一个将参数乘以 x 的函数。列表推导中使用的此类构造的一个简单示例如下所示:
>>> def foo (x):
... return lambda f: f*x
...
>>> a=[1,2,3]
>>> fn_foo = foo(5)
>>> [fn_foo (y) for y in a]
[5, 10, 15]
虽然我不认为在任何但相当深奥的情况下使用这种结构。 Python 不是一种真正的函数式语言,因此与(例如)Haskell 相比,它在使用更高阶函数的巧妙技巧方面的余地更小。您可能会找到这种类型的构造的应用程序,但它并不是真正的 that pythonic。您可以通过以下方式实现简单的转换:
>>> y=5
>>> a=[1,2,3]
>>> [x*y for x in a]
[5, 10, 15]
【讨论】: