如何对列表使用reduce

2024-06-17 10:48:08 发布

您现在位置:Python中文网/ 问答频道 /正文

下面的问题是什么?公司名称:

lss = reduce(list.extend, [[1],[2]], [])

原因:

^{pr2}$

我不确定NoneType是从哪里来的。在


Tags: 名称reduce公司原因listlssextendpr2
3条回答

正如Óscar López所指出的,list.extend返回{},因此不能与{}一起使用。除了建议使用lambda函数之外,还可以将list.__add__与{}一起使用:

>>> reduce(list.__add__, [[1],[2]], [])
[1, 2]

试试这个:

lss = reduce(lambda acc, ele : acc + ele, [[1],[2]], [])

lss
> [1, 2]

问题是^{}返回None(这就是NoneType的来源),而这与您想要做的不一样——传递给^{}的函数必须返回一个值:到目前为止的累计结果。在

我认为值得注意的是:

sum([[1],[2]], [])

也会起作用,我很肯定会比传递lambda来的更快。在

我很好奇不同方法的速度,所以我做了一些测试:

^{pr2}$

还有PyPy(因为,为什么不呢)

reduce(lambda a,b:a+b, x, [])               4797.5895648
reduce(list.__add__, x, [])                 4794.01214004
sum(x,[])                                   4748.02929902
y = [];for z in x: y.extend(z)                56.9253079891
y = [];map(y.extend,x)                        73.8642170429
y = [None]*400;del y[:];map(y.extend,x)      152.157783031
list(itertools.chain(*x))                    633.854824066
list(itertools.chain.from_iterable(x))       629.917827129
[a for b in x for a in b]                     89.6922459602

x = [[1,2,3,4],[2,3,4,5],[3,4,5,6],[4,5,6,7],[5,6,7,8],[6,7,8,9],[7,8,9,10],[8,9,10,11]]*100

结论:

  1. 在你的减量中使用lambda是很慢的
  2. 专用的sum函数比reduce更快
  3. 添加列表很慢。在
  4. Python循环开销很大。在

相关问题 更多 >