gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 21:10:36 25 4
gpt4 key购买 nike

我们知道

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com