我偶然发现了以下代码:
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]]
我不太明白这些值是如何被转换的。我知道*我习惯于打开清单,之后我就有点不确定了。对此有一步步的解释吗?
发布于 2021-01-26 23:04:00
下面是该代码对给定输入的转换:
list(map(lambda *a: list(a), *l)) l解压缩到:
list(map(lambda *a: list(a), [1, 2, 3], [4, 5, 6], [7, 8, 9])) map的文档解释了当它获得多个可迭代参数时会发生什么,如上面所示:
如果传递了额外的可迭代参数,则函数必须接受这些参数,并并行地应用于来自所有可迭代项的项。
因此,我们可以继续按如下方式分解,知道在本例中有3个可迭代的参数,因此映射函数在被调用时将得到三个参数:
list(map(lambda x, y, z: list((x, y, z)), [1, 2, 3], [4, 5, 6], [7, 8, 9])) 映射函数返回一个列表,因此:
list(map(lambda x, y, z: [x, y, z], [1, 2, 3], [4, 5, 6], [7, 8, 9])) 并行地为可迭代的每个值调用映射函数,因此:
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)))这些单个映射的结果是:
list(([1, 4, 7], [2, 5, 8], [3, 6, 9]))这最终变成了一个清单:
[ [1, 4, 7], [2, 5, 8], [3, 6, 9] ]https://stackoverflow.com/questions/65910327
复制相似问题