每个可能的组合的multi-lis

2024-04-25 14:43:19 发布

您现在位置:Python中文网/ 问答频道 /正文

list_a = [("A","<",1), ("A","==",5)]
list_b = [("B","<",5), ("B","==",7), ("B",">=",8)]
list_c = [("C","<",10),("C","<=",6),("C",">",4),("C","<=",6)]

我想把所有可能的组合列成一个列表,每个列表只允许一个。你知道吗

我看得出来itertools.产品有点接近我想要的,我知道我可以做一些像

new_list = []
for a in list_a:
  for b in list_b:
    for c in list_c
      new_list.append(list(itertools.combinations([a,b,c],2)))

但是这里的n**3复杂性似乎是一个非常糟糕的解决方案,因为我希望最终使用9个大小为30的列表(例如,list\c、list\d、list\e等等)+ 以下是一些可接受的可能输出:

[("A","<",1)]
[("A","<",1),("B","<",5)]
[("A","<",1),("B","==",7)]
[("A","<",1),("B",">=",8)]
[("A","<",1),("B",">=",8),("C","<",10)]

基本上,当您有一组选定的数字时,我了解itertools的用法,例如itertools.产品('ABCD'),3)将给出AAA、AAB、AAC、AAD、BAA、BAB、BAC等输出,但我似乎不知道如何使用stdlib最大限度地应用“每个列表只有一个”约束,而不修改一些非常低效的代码解决方案。你知道吗


Tags: in用法列表newfor产品数字解决方案
1条回答
网友
1楼 · 发布于 2024-04-25 14:43:19

关于:

import itertools

list_a = [("A","<",1), ("A","==",5)]
list_b = [("B","<",5), ("B","==",7), ("B",">=",8)]
list_c = [("C","<",10),("C","<=",6),("C",">",4),("C","<=",6)]

lists = [list_a, list_b, list_c]


for l in lists: l.insert(0, None)

for x in itertools.product(*lists):
    print list(filter(None, x))

对于这些列表,我得到60个元素,包括一个空元素。你知道吗

下面列出了示例元素的索引,以供参考:

[("A","<",1)]                           # 20
[("A","<",1),("B","<",5)]               # 25
[("A","<",1),("B","==",7)]              # 30
[("A","<",1),("B",">=",8)]              # 35
[("A","<",1),("B",">=",8),("C","<",10)] # 36

相关问题 更多 >

    热门问题