【发布时间】:2014-02-25 04:17:16
【问题描述】:
我有以下代码可以创建特定价格范围内的水果、蔬菜和饮料的组合:
fruits = [('apple', 1), ('banana', 2), ('orange', 3)]
veggies = [('tomato', 1), ('cucumber', 2), ('onion', 3)]
drinks = [('water', 1), ('juice', 2), ('soda', 3)]
for fruit1 in fruits:
for fruit2 in fruits:
for veggie1 in veggies:
for veggie2 in veggies:
for drink1 in drinks:
for drink2 in drinks:
if 12 <= fruit1[1]+fruit2[1]+veggie1[1]+veggie2[1]+drink1[1]+drink2[1] <= 14:
if fruit1 != fruit2:
if veggie1 != veggie2:
if drink1 != drink2:
combos.append((fruit1[0], fruit2[0], veggie1[0], veggie2[0], drink1[0], drink2[0], fruit1[1]+fruit2[1]+veggie1[1]+veggie2[1]+drink1[1]+drink2[1]))
它会检查以确保它不会两次选择相同的水果/蔬菜/饮料,但我需要确保组合是唯一的。
例如,如果我最终得到 p>
('apple', 'banana', 'tomato', 'cucumber', 'water', 'soda', 10)
我也不想要
('banana', 'apple', 'tomato', 'cucumber', 'water', 'soda', 10)
等等。这给我带来的麻烦超出了应有的范围,因此不胜感激。
【问题讨论】:
-
至少应该使用所有类别中的两个?
-
if 12 <= fruit1[1]+fruit2[1]+veggie1[1]+veggie2[1]+drink1[1]+drink2[1] <= 14:... 语法无效! -
@isedev,这是一个有效的语法。
a <= b <= c等价于a <= b and b <= c。 (链式运算符) -
好吧,我会成为……新人,至少我今天学到了一些新东西。
-
确实是神圣的嵌套。我认为最好通过使用为其设计的模块来避免所有嵌套,即:itertools。
标签: python list unique permutation