python - 将序列变成列表的函数

标签 python functional-programming toolz

我们知道

list(map(f,[1,2],[3,4],[6,7]))

相当于

[f(1,3,6),f(2,4,7)]

我想知道是否有内建函数tolist等价于[],这样

tolist(a,b,c,d)

等同于[a,b,c,d]

我觉得这样的函数在函数式编程中很有用。因为许多函数采用列表参数而不是序列。

当然,一个简单的自定义方式是lambda *x:list(x),但我总觉得它在语法上很麻烦,尤其是在函数式编程风格中使用它

map(lambda *x:list(x),[1,2],[3,4],[6,7])

所以我的问题是,如果没有这样的内置 tolist,我们是否可以使用像 toolz 这样的 FP 包更优雅地动态构建它?

PS:其实我想实现的是线程版的add(我知道numpy,暂时不想用)

from toolz.curried import *
import operator as op
def addwise(*args):
    return list(map(compose(reduce(op.add),lambda *x:list(x)),*args))

然后

addwise([1,2],[3,4],[6,7])

会给予

[10, 13]

最佳答案

如果

function is useful (....) Because many functions take list parameter

lambda 表达式不合适是一个好兆头。您不想在每次要应用此模式时都重复自己。

遗憾的是,我们离 Clojure 的简洁性还很远:

user=> (map + [1 2] [3 4] [6 7])
(10 13)

但我们仍然可以用一种相当 Pythonic 和优雅的方式来表达它:

def apply(f):
    def _(*args):
        return f(args)
    return _ 

可以用作:

from toolz.curried import reduce 

map(apply(reduce(op.add)), [1,2], [3,4], [6,7])

甚至更好

map(apply(sum), [1,2], [3,4], [6,7])

尽管在这种情况下 map 可以与 zip 结合使用:

map(sum, zip([1, 2], [3, 4], [6, 7])))

关于python - 将序列变成列表的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47321295/

相关文章:

javascript - 我正在尝试测试一个将另一个函数作为参数的函数

ios - 将发出数组的 SignalProducer 转换为发出原始数组所有元素的 SignalProducer

python - 在 python 中以相反的顺序柯里化(Currying)

Python - 将元组应用于功能工具 z.pipe 中的函数

python - 简单的 Python 方法需要永远执行/运行

python - VScode 看不到 pyenv python 解释器

functional-programming - 如何使用 2 个参数创建左折叠?

Python int 太大而无法放入 SQLite

php - 从数据库中检索数据的最有效算法

python - 了解 toolz 用例