如何解决如何找到从第一个列表中选择一个项目和从第二个列表中选择最多 n 个项目的所有组合
我有两个列表,我想返回一个新的列表列表,其中每个列表都来自第一个列表中的一个项目和第二个列表中最多两个项目: 来自实例:
vaccinate_list: [('vaccinate',(2,3)),('vaccinate',(8,1))]
quarantine_list: [('quarantine',(6,('quarantine',(3,4)),(0,1))]
将返回(没有新行):
allCombinations = [
[('vaccinate',3))],[('vaccinate',1))],4))],1)),1))]
]
我尝试使用 intertools 组合并挣扎, 请帮助
解决方法
最好的方法是使用 itertools.product。见下文(评论中的解释):
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)
输出:
[['vaccinate',(2,3)],['vaccinate',(8,1)],[('vaccinate',3)),('quarantine',(6,3))],(3,4))],(0,1))],1)),4)),1))]]
,
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))
可能很复杂,可能是一种愚蠢的方法,但它有效
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。