首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从第一个列表中选择一个项目,从第二个列表中最多找出n个项目的所有组合。

如何从第一个列表中选择一个项目,从第二个列表中最多找出n个项目的所有组合。
EN

Stack Overflow用户
提问于 2021-01-16 17:06:14
回答 2查看 66关注 0票数 1

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

代码语言:javascript
复制
vaccinate_list: [('vaccinate', (2, 3)), ('vaccinate', (8, 1))]
quarantine_list: [('quarantine', (6, 3)), ('quarantine', (3, 4)), ('quarantine', (0, 1))]

将返回(没有新行):

代码语言:javascript
复制
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))]
]

我尝试了工具间的组合,然后挣扎着,请帮助。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-01-16 17:39:38

最好的方法是使用itertools.product。见下文(评论中的解释):

代码语言:javascript
复制
allCombinations=[]

allCombinations.extend(vaccinate_list) #add items of vaccinate_list only

list_one=[i for i in itertools.product(vaccinate_list, quarantine_list)] #get all combinations with one item from each list

allCombinations.extend(list_one) #add them to allcombinations

list_two_temp=[i for i in itertools.combinations(quarantine_list, 2)] #get combinations of 2, in quarantine_list

list_two=[i for i in itertools.product(vaccinate_list, list_two_temp)] #get combinations with 1 item from vaccinate_list and 2 from quarantine_list

list_two=[(i[0],i[1][0], i[1][1]) for i in list_two] #flatten the items from previous list

allCombinations.extend(list_two) #add them to allcombinations

allCombinations=[list(i) for i in allCombinations] #change all items to list

print(allCombinations)

输出:

代码语言:javascript
复制
[['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))]]
票数 0
EN

Stack Overflow用户

发布于 2021-01-17 00:13:30

代码语言:javascript
复制
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))

可能很复杂,也可能是一种愚蠢的方法,但它有效。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65752271

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档