微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 Python 中生成列表组合 - 有规则

如何解决在 Python 中生成列表组合 - 有规则

我有两个列表:

list1 = ["A","B","C","D","E"]
list2 = ["AA","BB","CC","DD","EE"]

我想创建所有可能的组合,如下所示:

    A-B-C-D-E
    A-BB-C-D-E
    A-B-C-DD-E...etc.

规则是两个相似的字母(如A-AA,B-BB)不能同时在组合中,并且顺序是可逆的(ABCDE和BAECD内容相同,所以我不两个都需要)

如何使用 itertools 进行管理?

解决方法

TL;DR:map('-'.join,product(*zip(list1,list2)))


使用 itertools 相对简单,但您必须仔细考虑每一步。

首先,您可以将两个列表压缩在一起以获得一系列元组。最终结果中的每个元素都将包含每个元组中的一个选项。

>>> list1 = ["A","B","C","D","E"]
>>> list2 = ["AA","BB","CC","DD","EE"]
>>> list(zip(list1,list2))
[('A','AA'),('B','BB'),('C','CC'),('D','DD'),('E','EE')]

接下来,我们需要五个元组中每个元组的笛卡尔积。这为我们提供了 32 种不同的方式来选择 A 或 AA 之一,然后选择 B 或 BB 等。为此,我们使用 *zip 的结果解包为五个单独的参数product

>>> from itertools import product
>>> for x in product(*zip(list1,list2)):
...   print(x)
...
('A','B','C','D','E')
('A','EE')
('A','DD','CC','E')
# etc

获得产品后,产品的每个元素都是 '-'.join 的有效参数,以在所需的集合中创建一个字符串:

>>> for x in map('-'.join,list2))):
...   print(x)
...
A-B-C-D-E
A-B-C-D-EE
A-B-C-DD-E
A-B-C-DD-EE
A-B-CC-D-E
A-B-CC-D-EE
A-B-CC-DD-E
A-B-CC-DD-EE
A-BB-C-D-E
A-BB-C-D-EE
A-BB-C-DD-E
A-BB-C-DD-EE
A-BB-CC-D-E
A-BB-CC-D-EE
A-BB-CC-DD-E
A-BB-CC-DD-EE
AA-B-C-D-E
AA-B-C-D-EE
AA-B-C-DD-E
AA-B-C-DD-EE
AA-B-CC-D-E
AA-B-CC-D-EE
AA-B-CC-DD-E
AA-B-CC-DD-EE
AA-BB-C-D-E
AA-BB-C-D-EE
AA-BB-C-DD-E
AA-BB-C-DD-EE
AA-BB-CC-D-E
AA-BB-CC-D-EE
AA-BB-CC-DD-E
AA-BB-CC-DD-EE

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?