如何生成满足前两位与后两位分别求和条件的itertools.product组合?
解决方案
你只需要修改combination列表推导式里的筛选条件即可,把原来的总求和判断,替换为前两位求和、后两位求和分别满足小于等于21的判断:
import itertools a = [*range(22)], [*range(22)], [*range(22)], [*range(22)] # 修改筛选条件:前两位求和<=21 且 后两位求和<=21 combination = [seq for seq in itertools.product(*a) if sum(seq[:2]) <= 21 and sum(seq[2:]) <= 21] print(combination) lst1 = [item[0] for item in combination] lst2 = [item[1] for item in combination] lst3 = [item[2] for item in combination] lst4 = [item[3] for item in combination]
逻辑说明
seq[:2]取元组的前两个元素,sum(seq[:2])计算前两位的和seq[2:]取元组的后两个元素,sum(seq[2:])计算后两位的和- 两个条件用
and关联,同时满足才会被保留,你需要的(0, 21, 1, 20)这类组合就会被正常筛选出来了。
内容的提问来源于stack exchange,提问作者Janani Ethirraj
相关产品推荐
相关产品推荐

