首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用map()和lambda转置

使用map()和lambda转置
EN

Stack Overflow用户
提问于 2021-01-26 22:41:00
回答 1查看 102关注 0票数 4

我偶然发现了以下代码:

代码语言:javascript
复制
l = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
list(map(lambda *a: list(a), *l)) 

返回:[[1, 4, 7], [2, 5, 8], [3, 6, 9]]

我不太明白这些值是如何被转换的。我知道*我习惯于打开清单,之后我就有点不确定了。对此有一步步的解释吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-26 23:04:00

下面是该代码对给定输入的转换:

代码语言:javascript
复制
list(map(lambda *a: list(a), *l)) 

l解压缩到:

代码语言:javascript
复制
list(map(lambda *a: list(a), [1, 2, 3], [4, 5, 6], [7, 8, 9])) 

map的文档解释了当它获得多个可迭代参数时会发生什么,如上面所示:

如果传递了额外的可迭代参数,则函数必须接受这些参数,并并行地应用于来自所有可迭代项的项。

因此,我们可以继续按如下方式分解,知道在本例中有3个可迭代的参数,因此映射函数在被调用时将得到三个参数:

代码语言:javascript
复制
list(map(lambda x, y, z: list((x, y, z)), [1, 2, 3], [4, 5, 6], [7, 8, 9])) 

映射函数返回一个列表,因此:

代码语言:javascript
复制
list(map(lambda x, y, z: [x, y, z], [1, 2, 3], [4, 5, 6], [7, 8, 9])) 

并行地为可迭代的每个值调用映射函数,因此:

代码语言:javascript
复制
list(((lambda x, y, z: [x, y, z])(1, 4, 7), 
      (lambda x, y, z: [x, y, z])(2, 5, 8), 
      (lambda x, y, z: [x, y, z])(3, 6, 9)))

这些单个映射的结果是:

代码语言:javascript
复制
list(([1, 4, 7], [2, 5, 8], [3, 6, 9]))

这最终变成了一个清单:

代码语言:javascript
复制
[ [1, 4, 7], [2, 5, 8], [3, 6, 9] ]
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65910327

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档