我有使用Python的itertools库的这个函数创建一个列表(实际上是一个迭代器):这种格式如何只选择字符串/整数列表中的整数?
comb = [c for i in range(len(menu)+1) for c in combinations(menu, i)]
为了给你一个想法menu
的列表[“食品名称”,克糖]的:
menu = [ ["cheesecake", 13], ["pudding", 24], ["bread", 13], .........]
所以comb
本质上是包含了所有菜单子列表的可能组合的列表。我必须通过梳理创建所有可能的项目组合,其总糖含量将完全等于(不少,不会更多,正确)max_sugar = 120
。
所以我想我可以遍历comb
中的每个可能的组合,并检查一个if
陈述,如果这个组合中物品的糖的总和等于完全max_sugar
。如果是这种情况,我想输出这个组合中菜单项的名称。否则,我想通过其他组合继续以这种方式:
for e in comb:
for l in e:
if sum(sugars of items in this combination) == max_sugar: # pseudo-code
print items in this combination #pseudo code
我想我遇到的问题是在l
来访问每个项目只有糖值和检查条件,如果它是TRUE
打印名。 我不擅长Python列表解析,但在过去的几天里我已经有了很多改进!
flag = 0
num_comb = 1
comb = [c for i in range(len(menu)+1) for c in combinations(menu, i)]
for e in comb:
if sum(l[1] for l in e) == targetSugar:
print "The combination number " + str(num_comb) + " is:\n"
print([l[0] for l in e])
print "\n\n\n"
num_comb += 1
flag = 1
if flag == 0:
print "there are no combinations of dishes for your sugar intake... Sorry! :D "
更清晰地使用拆包,即''为名,糖在电子' – wim
这是一个很好的观点,谢谢;编辑 – jonrsharpe
谢谢大家的帮忙!现在有很多意义! – user3245453