【问题标题】:How to run an operation on a collection in Python and collect the results?如何在 Python 中对集合运行操作并收集结果?
【发布时间】:2010-10-12 07:19:33
【问题描述】:

如何在 Python 中对集合运行操作并收集结果?

如果我有一个包含 100 个数字的列表,并且我想为每个数字运行一个这样的函数:

Operation ( originalElement, anotherVar ) # returns new number.

并像这样收集结果:

结果 = 另一个列表...

我该怎么做?也许使用 lambdas?

【问题讨论】:

    标签: python list lambda


    【解决方案1】:

    另一种(有些折旧的)方法是:

    定义凯文(v): 返回 v*v

    vals = range(0,100)

    地图(凯文,瓦尔斯)

    【讨论】:

    • IIRC 这被保留为遗留功能,但作为列表理解的包装器实现。
    【解决方案2】:

    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]
    

    【讨论】:

    • Mykola:取决于你想要什么,我会说 y = 4; a = [f(x, y) for x in bar] 或 a = [f(x, y) for x, y in zip(bar, baz)]。另请参阅 izip。
    • 对于简单的操作,您甚至不需要为操作定义单独的函数,但可以“内联”执行,例如 in squares = [x*x for x in a]
    【解决方案3】:
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 2022-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多