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

如何从一组列表中获取笛卡尔积(每种可能的值组合)?

输入:

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) ...]



狐的传说
浏览 686回答 4
4回答

达令说

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)>>>

蝴蝶不菲

对于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())[()]
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python