首页 > 解决方案 > Python 组合和产品

问题描述

我有一个数据框列的列表:

L=[AA ,  AS  ,  AD  , BB  , BC  , CD ,  CF,CG ]

我需要所有项目的组合,没有特定的顺序。

但是,每个组合中我只能有一个以 A 开头的名称,但我可以有多个以 C 开头的名称或没有。

关于 B,我必须至少有 1 个 B,但可以有更多

所以我需要所有的组合

A=[AA,AS,AD] #only one of these
B=[BB,BC]  #at least one of these
all_others=[CD,CF,CG]  #All, 1, 2 or none of these

到目前为止,我有这个代码;

from itertools import product

for choices in product(['AA','AS','AD',None],['BB', 'BC', None], ['CD','CF', None],):
    print(' '.join(column for column in choices if column))

这可行,但是,它只允许一个以 C 开头的值,但我想要 C 的product所有组合。任何人都可以看到我可以进行的良好编辑吗?

总结;我需要列表中名称的所有组合。使用一条规则,您不能有多个以 A 开头的变量和多个以 B 开头的变量

标签: pythonlistcombinationsproductitertools

解决方案


试试这个而不是你的for循环:

for choices in itertools.product(['AA','AS','AD',None],['BB', 'BC', None],[' '.join(k) for j in list(itertools.combinations(['CD','CF'],i) for i in range(3)) for k in j]):
    # do what you need

选择使用的输出print(' '.join(column for column in choices if column))是:

AA BB
AA BB CD
AA BB CF
AA BB CD CF
AA BC
AA BC CD
AA BC CF
AA BC CD CF
AA
AA CD
AA CF
AA CD CF
AS BB
AS BB CD
AS BB CF
AS BB CD CF
AS BC
AS BC CD
AS BC CF
AS BC CD CF
AS
AS CD
AS CF
AS CD CF
AD BB
AD BB CD
AD BB CF
AD BB CD CF
AD BC
AD BC CD
AD BC CF
AD BC CD CF
AD
AD CD
AD CF
AD CD CF
BB
BB CD
BB CF
BB CD CF
BC
BC CD
BC CF
BC CD CF

CD
CF
CD CF

我建议您更换或删除它们None''


推荐阅读