给定以下列表:
arr = [1, 5, 2, 6, 3, 7, 4]
cmds = [[1, 3, 2], [3, 5, 1], [2, 7, 4]]
对于cmds
中的每个命令,我希望获得
[arr[1:3][2], arr[3:5][1], arr[2:7][4]]
我试过:
list(map(lambda x: arr[x[0]:x[1]][x[2]], cmds))
但是我能写一个比上面更简洁的代码吗?我想使用3个位置参数i,j,k而不是单独使用x:
list(map(lambda i, j, k: arr[i:j][k], cmds)) # This gives TypeError
1条答案
按热度按时间pod7payv1#
函数签名中的参数解包在Python 3中已经被移除(参见this answer)。
以下是一些替代方案:
如果你想用干净的代码获得同样的效果,@bereal的答案是一个不错的选择:
这是一个for循环/列表解析,因此允许解包。
如果您坚持使用
map
,可以使用nested lambdas:在外部lambda中,
cmd
被赋值为cmds
中的一个元素,它对应于一个长度为3的列表。这个外部lambda的返回值是一个IIFE,它定义了一个带3个参数的内部lambda,我们通过从外部lambda解包cmd
参数来传入它。这张是@KellyBundy:
在本例中,这相当于