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

获取一系列列表的笛卡尔积?

获取一系列列表的笛卡尔积?

狐的传说 2019-05-24 15:56:30
如何从一组列表中获取笛卡尔积(每种可能的值组合)?输入:somelists = [    [1, 2, 3],    ['a', 'b'],    [4, 5]]期望的输出:[(1, 'a', 4), (1, 'a', 5), (1, 'b', 4), (1, 'b', 5), (2, 'a', 4), (2, 'a', 5) ...]
查看完整描述

4 回答

?
达令说

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

import itertools

>>> for i in itertools.product([1,2,3],['a','b'],[4,5]):

...         print i

...

(1, 'a', 4)

(1, 'a', 5)

(1, 'b', 4)

(1, 'b', 5)

(2, 'a', 4)

(2, 'a', 5)

(2, 'b', 4)

(2, 'b', 5)

(3, 'a', 4)

(3, 'a', 5)

(3, 'b', 4)

(3, 'b', 5)

>>>


查看完整回答
反对 回复 2019-05-24
?
蝴蝶不菲

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

对于Python 2.5及更早版本:


>>> [(a, b, c) for a in [1,2,3] for b in ['a','b'] for c in [4,5]]

[(1, 'a', 4), (1, 'a', 5), (1, 'b', 4), (1, 'b', 5), (2, 'a', 4), 

 (2, 'a', 5), (2, 'b', 4), (2, 'b', 5), (3, 'a', 4), (3, 'a', 5), 

 (3, 'b', 4), (3, 'b', 5)]

这是一个递归版本product()(只是一个插图):


def product(*args):

    if not args:

        return iter(((),)) # yield tuple()

    return (items + (item,) 

            for items in product(*args[:-1]) for item in args[-1])

例:


>>> list(product([1,2,3], ['a','b'], [4,5])) 

[(1, 'a', 4), (1, 'a', 5), (1, 'b', 4), (1, 'b', 5), (2, 'a', 4), 

 (2, 'a', 5), (2, 'b', 4), (2, 'b', 5), (3, 'a', 4), (3, 'a', 5), 

 (3, 'b', 4), (3, 'b', 5)]

>>> list(product([1,2,3]))

[(1,), (2,), (3,)]

>>> list(product([]))

[]

>>> list(product())

[()]


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

添加回答

举报

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