为了账号安全,请及时绑定邮箱和手机立即绑定

如何以这种方式对二维列表中的元素进行排序?

如何以这种方式对二维列表中的元素进行排序?

Cats萌萌 2021-05-21 17:06:56
我有一个像这样的二维列表(总是像正方形的):[[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)但是我的问题是主列表的长度每次都不同。有什么把戏吗?谢谢!
查看完整描述

2 回答

?
蝴蝶刀刀

TA贡献1801条经验 获得超8个赞

您可以使用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循环。


查看完整回答
反对 回复 2021-05-25
?
跃然一笑

TA贡献1826条经验 获得超6个赞

您可以使用itertools.product


>>> import itertools

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

>>> list(map(sum, itertools.product(*s)))

[12, 13, 14, 13, 14, 15, 14, 15, 16, 13, 14, 15, 14, 15, 16, 15, 16, 17, 14, 15, 16, 15, 16, 17, 16, 17, 18]



查看完整回答
反对 回复 2021-05-25
  • 2 回答
  • 0 关注
  • 220 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信