python - python中的展平列表

标签 python list

我看过很多关于如何在 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 的作用是做两件事:

  1. 一个函数f:
    1. 恰好接受 2 个参数
    2. 返回使用这两个值计算的值
  2. 可迭代的 iter(例如 liststr)

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/

相关文章:

python - 你如何在 Heroku 中删除、清理或清除 virtualenv?

python - 按指标反转元素列表

c++ - 什么时候修改链表?

python - 如何删除列表组合列表中列表的特定元素?

python - 如何使 Selenium RC 不移动浏览器窗口?

python - 如何向多个收件人发送消息?

python - 在 Django 中使用 AJAX 更新数据库

python - 从用户的输入中确定最常见的词。 [Python]

list - 使用 Racket 情节线

javascript - 如何合并列表中的数据 Javascript