首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >列表列表的所有组合

列表列表的所有组合
EN

Stack Overflow用户
提问于 2009-04-29 00:44:48
回答 7查看 178K关注 0票数 311

我基本上是在寻找Combination of List>的python版本

给定一个列表列表,我需要一个新的列表,它给出列表之间所有可能的项组合。

代码语言:javascript
复制
[[1,2,3],[4,5,6],[7,8,9,10]] -> [[1,4,7],[1,4,8],...,[3,6,10]]

列表的数量是未知的,所以我需要一个适用于所有情况的东西。优雅的加分!

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2009-04-28 16:54:57

您需要itertools.product

代码语言:javascript
复制
>>> 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)]
票数 562
EN

Stack Overflow用户

发布于 2009-04-29 00:55:05

最优雅的解决方案是在Python2.6中使用itertools.product

如果你使用的不是Python2.6,itertools.product的文档实际上展示了一个等效的功能,以“手动”的方式完成产品:

代码语言:javascript
复制
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)
票数 28
EN

Stack Overflow用户

发布于 2009-04-28 16:58:14

代码语言:javascript
复制
listOLists = [[1,2,3],[4,5,6],[7,8,9,10]]
for list in itertools.product(*listOLists):
  print list;

我希望你能发现它和我第一次遇到它时一样优雅。

票数 21
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/798854

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档