首页 > 解决方案 > 在 Python 中创建两个列表的压缩列表,但允许从一个列表到另一个列表重复

问题描述

使用itertoolsandpermutation()获得两个列表的所有唯一组合很容易。例如,如果我有:

['a', 'b']
[1, 2]

我可以很容易地得到:

[
  [('a',1),('b',2)],
  [('a',2),('b',1)]
]

但是,我真正想要的是允许重复配对。较大列表中的每个项目都是唯一的,但组合的数量将是指数级的,因为第一个列表中的相同项目可以分配给第二个列表中的多个项目。所以对于上面的两个列表,我会得到:

[
  [('a',1),('a',2)],
  [('a',1),('b',2)],
  [('b',1),('a',2)]
  [('b',1),('b',2)]
]

如果我在两个列表中的每一个中都有三个项目,我最终会得到 27 个结果。最好的方法是什么?

标签: python

解决方案


>>> from itertools import combinations, product
>>> x = ['a', 'b']
>>> y = [1, 2]
>>> list(combinations(product(x, y), 2))
[(('a', 1), ('a', 2)),
 (('a', 1), ('b', 1)),
 (('a', 1), ('b', 2)),
 (('a', 2), ('b', 1)),
 (('a', 2), ('b', 2)),
 (('b', 1), ('b', 2))]

推荐阅读