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

列表的所有组合

列表的所有组合

RISEBY 2019-07-05 12:36:14
列表的所有组合我基本上是在找一个python版本的合二为一List<List<int>>给定一个列表,我需要一个新的列表,给出列表之间所有可能的项目组合。[[1,2,3],[4,5,6],[7,8,9,10]] -> [[1,4,7],[1,4,8],...,[3,6,10]]列表的数量是未知的,所以我需要一些对所有情况都有效的东西。优雅加分!
查看完整描述

3 回答

?
慕标5832272

TA贡献1966条经验 获得超4个赞

你需要itertools.product:

>>> import itertools

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

>>> list(itertools.product(*a))

[(1, 4, 7), (1, 4, 8), (1, 4, 9), (1, 4, 10), (1, 5, 7), (1, 5, 8), (1, 5, 9), (1, 5, 10), (1, 6, 7), (1, 6, 8), (1, 6, 9), (1, 6, 10), (2, 4, 7), (2, 4, 8), (2, 4, 9), (2, 4, 10), (2, 5, 7), (2, 5, 8), (2, 5, 9), (2, 5, 10), (2, 6, 7), (2, 6, 8), (2, 6, 9), (2, 6, 10), (3, 4, 7), (3, 4, 8), (3, 4, 9), (3, 4, 10), (3, 5, 7), (3, 5, 8), (3, 5, 9), (3, 5, 10), (3, 6, 7), (3, 6, 8), (3, 6, 9), (3, 6, 10)]


查看完整回答
反对 回复 2019-07-05
?
qq_笑_17

TA贡献1818条经验 获得超7个赞

最优雅的解决方案是使用itertools.积在python 2.6中。

如果您不使用Python2.6,则itertools.Products的docs实际上显示了一个等效的函数来以“手动”的方式完成该产品:

def product(*args, **kwds):
    # product('ABCD', 'xy') --> Ax Ay Bx By Cx Cy Dx Dy
    # product(range(2), repeat=3) --> 000 001 010 011 100 101 110 111
    pools = map(tuple, args) * kwds.get('repeat', 1)
    result = [[]]
    for pool in pools:
        result = [x+[y] for x in result for y in pool]
    for prod in result:
        yield tuple(prod)


查看完整回答
反对 回复 2019-07-05
?
30秒到达战场

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

listOLists = [[1,2,3],[4,5,6],[7,8,9,10]]for list in itertools.product(*listOLists):
  print list;

我希望你能像我第一次遇到它时那样优雅。


查看完整回答
反对 回复 2019-07-05
  • 3 回答
  • 0 关注
  • 677 浏览
慕课专栏
更多

添加回答

举报

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