我有一个像这样的二维列表(总是正方形):

[[a1,a2,a3], [b1,b2,b3], [c1,c2,c3]]


我需要列出27个包含以下元素的列表:

[a1+b1+c1],[a1+b1+c2],[a1+b1+c3],......,[a3+b3+c2],[a3+b3+c3]


如果主列表始终由3个元素组成,我可以使用这种算法:

for i in list[0]
     for j in list[1]:
         for k in list[2]:
             some_func(i,j,k)


但是我的问题是主列表的长度每次都不同。
有没有把戏?
谢谢!

最佳答案

您可以使用product中的itertools

>>> from itertools import product

>>> a =[[1,2,3],[4,5],[6,7,8,9]]

>>> print ([i for i in product(*a)])
[(1, 4, 6), (1, 4, 7), (1, 4, 8), (1, 4, 9), (1, 5, 6), (1, 5, 7), (1, 5, 8), (1
, 5, 9), (2, 4, 6), (2, 4, 7), (2, 4, 8), (2, 4, 9), (2, 5, 6), (2, 5, 7), (2, 5
, 8), (2, 5, 9), (3, 4, 6), (3, 4, 7), (3, 4, 8), (3, 4, 9), (3, 5, 6), (3, 5, 7
), (3, 5, 8), (3, 5, 9)]

>>> print ([sum(i) for i in product(*a)])
[11, 12, 13, 14, 12, 13, 14, 15, 12, 13, 14, 15, 13, 14, 15, 16, 13, 14, 15, 16,
 14, 15, 16, 17]


通过采用每个子列表的笛卡尔乘积并对每个子列表求和,可以进行此操作。

当然,可以将其缩短为:

>>> print (list(map(sum, product(*a))))
[11, 12, 13, 14, 12, 13, 14, 15, 12, 13, 14, 15, 13, 14, 15, 16, 13, 14, 15, 16,
 14, 15, 16, 17]


使用map忽略for循环。

关于python - 如何以这种方式对二维列表中的元素进行排序?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51847535/

10-09 20:18
查看更多