我是python的新手,很难理解下面的代码。如果有人能给出解释,那就太好了。我有两个元组。具体来说,我无法理解for循环如何在这里工作。而weight_cost [index] [0]意味着什么。
ratios=[(3, 0.75), (2, 0.5333333333333333), (0, 0.5), (1, 0.5)]
weight cost=[(8, 4), (10, 5), (15, 8), (4, 3)]
best_combination = [0] * number
best_cost = 0
weight = 0
for index, ratio in ratios:
if weight_cost[index][0] + weight <= capacity:
weight += weight_cost[index][0]
best_cost += weight_cost[index][1]
best_combination[index] = 1
答案 0 :(得分:3)
当您尝试理解一段代码时,进入的一个好习惯是删除不相关的部分,这样您就可以看到您关心的代码正在做什么。这通常被称为MCVE。
使用您的代码片段,我们可以清理几件事,让我们感兴趣的行为更清晰。
离开我们:
ratios=[(3, 0.75), (2, 0.5333333333333333), (0, 0.5), (1, 0.5)]
for index, ratio in ratios:
print('index: %s, ratio %s' % (index, ratio))
现在我们可以将其放入REPL并进行实验:
>>> ratios=[(3, 0.75), (2, 0.5333333333333333), (0, 0.5), (1, 0.5)]
>>> for index, ratio in ratios:
... print('index: %s, ratio %s' % (index, ratio))
...
index: 3, ratio 0.75
index: 2, ratio 0.5333333333333333
index: 0, ratio 0.5
index: 1, ratio 0.5
您现在可以清楚地看到它正在做什么 - 按顺序循环遍历列表的每个元组,并将元组中的第一个和第二个值提取到index
和ratio
变量中。
尝试尝试一下 - 如果你制作一个大小为1或3的元组会发生什么?如果你只在循环中指定一个变量而不是两个变量怎么办?你能指定两个以上的变量吗?
答案 1 :(得分:0)
for循环遍历数组中的每个元组,将其零索引分配给index
,并将其一个索引分配给比率。
然后检查weight_cost中的相应索引,它是一个元组,并检查该元组的零索引。这被添加到权重中,并且它小于或等于容量,我们进入if块。
同样,索引用于访问其他列表中的特定项目,如前所述。