假设我有一个列表列表:
[[1,2,3,4], [4,5,6,7],...]
,我想创建一个新的列表列表,其中每个子列表现在包含2个元素(第一个元素是第一个列表的前两个元素的乘积,第二个元素是后两个元素的乘积):
[[1*2, 3*4], [4*5, 6*7]] = [[2,12],[20,42]]
我该怎么做?
答案 0 :(得分:3)
使用lambda
l=[[1,2,3,4], [4,5,6,7]]
res = list(map(lambda x: [x[0]*x[1], x[2]*x[3]], l))
print(res)
输出
[[2, 12], [20, 42]]
答案 1 :(得分:1)
答案 2 :(得分:1)
或更通用的解决方案,不需要对索引进行硬编码:
lists = [[1, 2 ,3, 4], [4, 5, 6, 7]]
print([[a * b for a, b in zip(l[::2], l[1::2])] for l in lists])
# [[2, 12], [20, 42]]
这会将每个子列表中的奇数和偶数索引压缩在一起并相乘,以为每个子列表创建2个中间列表为代价。
注意事项
如上所述,这将为每个子列表创建2个中间列表,这会增加较小的内存和时间开销。
这不适用于元素数为奇数的子列表(但 元素数为偶数的列表都有效)