得到一系列列表的笛卡尔积?

新手上路,请多包涵

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

输入:

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

原文由 ʞɔıu 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 693
2 个回答

itertools.product

可从 Python 2.6 获得。

 import itertools

somelists = [
   [1, 2, 3],
   ['a', 'b'],
   [4, 5]
]
for element in itertools.product(*somelists):
    print(element)

这与,

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

原文由 Kenan Banks 发布,翻译遵循 CC BY-SA 4.0 许可协议

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

原文由 Jason Baker 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题