我看过很多关于如何在 Python 中展平列表的帖子。但我一直无法理解这是如何工作的:reduce(lambda x,y:x+y,*myList)
谁能解释一下这是如何工作的:
>>> myList = [[[1,2,3],[4,5],[6,7,8,9]]]
>>> reduce(lambda x,y:x+y,*myList)
[1, 2, 3, 4, 5, 6, 7, 8, 9]
>>>
链接已发布:
How to print list of list into one single list in python without using any for or while loop?
Flattening a shallow list in Python
Flatten (an irregular) list of lists
如果有人认为这与其他帖子重复,我会在了解它的工作原理后将其删除。
谢谢。
最佳答案
用简单的英语来说,reduce
的作用是做两件事:
- 一个函数
f
:- 恰好接受 2 个参数
- 返回使用这两个值计算的值
- 可迭代的
iter
(例如list
或str
)
reduce
计算 f(iter[0],iter[1])
的结果(iterable 的前两项),并跟踪这个值这是刚刚计算出来的(称之为 temp
)。 reduce
然后计算 f(temp,iter[2])
并且现在跟踪这个新值。此过程一直持续到 iter
中的每一项都已传递到 f
中,并返回计算出的最终值。
使用 *
将 *myList
传递给 reduce
函数是因为它接受一个可迭代对象并将其转换为多个参数。这两行做同样的事情:
myFunc(10,12)
myFunc(*[10,12])
在 myList
的情况下,您使用的是 list
,其中只包含一个 list
。因此,将 *
放在前面会将 myList
替换为 myList[0]
。
关于兼容性,请注意 reduce
函数在 Python 2 中工作得很好,但在 Python 3 中你必须这样做:
import functools
functools.reduce(some_iterable)
关于python - python中的展平列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20454820/