从多个列表中选择组合

发布于 2021-01-29 16:54:34

我是python的新手,正在努力形成多个列表的组合。因此,我有三个(可能还有更多)如下所示:

uk_rock_stars=[1,2,3,4,5,6,7,8,9]
uk_pop_stars=[10,11,12,13,1,4,6,22,81]
us_stars=[22,34,44,7,33,99,22,77,99]
.
.

具有相同长度的所有列表。现在,我想生成它们的组合列表,其中N是上述列表的总数。我正在寻找类似的结果:

comb=[(1,10,22),(1,10,34),(1,10,44)...etc (all combinations)....]

这样,每个组合(例如(1,10,22))的长度与原始列表的数量相同(在这种情况下为3)

关注者
0
被浏览
52
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    阅读此http://docs.python.org/2/library/itertools.html#itertools.product,它解释了所有内容。

    itertools是一个程序包,具有用于迭代集合的许多有用功能。一个有用的功能是product创建一个生成器的函数,该生成器将迭代您提供给它的任意数量的可迭代集合的笛卡尔乘积。

    的结果itertools.product不是列表,而是生成器。python生成器与其他语言中的协程类似。这意味着它将根据需要计算您的组合。如果您计算三个大小分别为100的可迭代变量的乘积,但仅使用前10个左右,itertools.product则将仅计算10个组合,而不计算所有100
    ^ 3个组合。

    如果您实际上想要一个列表对象而不是一个生成器(也许您想计算切片或其他东西),请调用该list函数并将生成器对象作为参数传递。

    以下代码产生所有组合并打印结果。

    码:

    import itertools
    
    uk_rock_stars=[1,2,3,4,5,6,7,8,9]
    uk_pop_stars=[10,11,12,13,1,4,6,22,81]
    us_stars=[22,34,44,7,33,99,22,77,99]
    
    for combination in itertools.product(uk_rock_stars, uk_pop_stars, us_stars):
        print combination
    

    输出:

    (1, 10, 22)
    (1, 10, 34)
    (1, 10, 44)
    (1, 10, 7)
    (1, 10, 33)
    (1, 10, 99)
    (1, 10, 22)
    (1, 10, 77)
    (1, 10, 99)
    (1, 11, 22)
    (1, 11, 34)
    (1, 11, 44)
    (1, 11, 7)
    (1, 11, 33)
    (1, 11, 99)
    (1, 11, 22)
    (1, 11, 77)
    (1, 11, 99)
    ...
    etc.
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看