首页 > 解决方案 > 如何找到从第一个列表中选择一个项目和从第二个列表中选择最多 n 个项目的所有组合

问题描述

我有两个列表,我想返回一个新的列表列表,其中每个列表都是从第一个列表中选择一个项目,从第二个列表中选择最多2 个项目:来自实例:

vaccinate_list: [('vaccinate', (2, 3)), ('vaccinate', (8, 1))]
quarantine_list: [('quarantine', (6, 3)), ('quarantine', (3, 4)), ('quarantine', (0, 1))]

将返回(没有新行):

allCombinations = [
[('vaccinate', (2, 3))], 
[('vaccinate', (8, 1))], 
[('vaccinate', (2, 3)), ('quarantine', (6, 3))], 
[('vaccinate', (2, 3)), ('quarantine', (3, 4))], 
[('vaccinate', (2, 3)), ('quarantine', (0, 1))], 
[('vaccinate', (8, 1)), ('quarantine', (6, 3))], 
[('vaccinate', (8, 1)), ('quarantine', (3, 4))], 
[('vaccinate', (8, 1)), ('quarantine', (0, 1))], 
[('vaccinate', (2, 3)), ('quarantine', (6, 3)), ('quarantine', (3, 4))], 
[('vaccinate', (2, 3)), ('quarantine', (6, 3)), ('quarantine', (0, 1))], 
[('vaccinate', (2, 3)), ('quarantine', (3, 4)), ('quarantine', (0, 1))], 
[('vaccinate', (8, 1)), ('quarantine', (6, 3)), ('quarantine', (3, 4))], 
[('vaccinate', (8, 1)), ('quarantine', (6, 3)), ('quarantine', (0, 1))], 
[('vaccinate', (8, 1)), ('quarantine', (3, 4)), ('quarantine', (0, 1))]
]

我尝试使用 intertools 组合并挣扎,请帮助

标签: pythonlistcombinationsitertools

解决方案


for i in vaccinate_list:
    all_combinations.append(i)
for i in vaccinate_list:
    for j in quarantine_list:
         all_combinations.append((i,j))
for i in vaccinate_list:
     for j in quarantine_list:
          for k in quarantine_list:
               all_combinations.append((i, j, k))

可能很复杂,并且可能是一种愚蠢的方法,但它确实有效


推荐阅读