У меня есть список (на самом деле итератор), который был создан с помощью этой функции библиотеки 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 "
Очиститель для использования распаковки, т.е. 'для названия, сахара в e' – wim
Это хороший момент, спасибо; редактирование – jonrsharpe
Спасибо вам за помощь! Теперь имеет большой смысл! – user3245453