在列表列表上进行操作以创建新列表

时间:2019-05-05 20:52:15

标签: python

假设我有一个列表列表:

[[1,2,3,4], [4,5,6,7],...]

,我想创建一个新的列表列表,其中每个子列表现在包含2个元素(第一个元素是第一个列表的前两个元素的乘积,第二个元素是后两个元素的乘积):

[[1*2, 3*4], [4*5, 6*7]] = [[2,12],[20,42]]

我该怎么做?

3 个答案:

答案 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)

您可以简单地遍历列表并创建所需内容:

result = [[l[0] * l[1], l[2] * l[3]] for l in list_of_lists]

enter image description here

答案 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个中间列表,这会增加较小的内存和时间开销。

  • 这不适用于元素数为奇数的子列表(但 元素数为偶数的列表都有效)