for循环如何在元组中工作

时间:2017-05-10 02:19:10

标签: python loops for-loop tuples

我是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

2 个答案:

答案 0 :(得分:3)

当您尝试理解一段代码时,进入的一个好习惯是删除不相关的部分,这样您就可以看到您关心的代码正在做什么。这通常被称为MCVE

使用您的代码片段,我们可以清理几件事,让我们感兴趣的行为更清晰。

  1. 我们可以删除循环的内容,只需打印值
  2. 我们可以删除第二个元组和其他变量,我们不再使用
  3. 离开我们:

    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
    

    您现在可以清楚地看到它正在做什么 - 按顺序循环遍历列表的每个元组,并将元组中的第一个和第二个值提取到indexratio变量中。

    尝试尝试一下 - 如果你制作一个大小为1或3的元组会发生什么?如果你只在循环中指定一个变量而不是两个变量怎么办?你能指定两个以上的变量吗?

答案 1 :(得分:0)

for循环遍历数组中的每个元组,将其零索引分配给index,并将其一个索引分配给比率。

然后检查weight_cost中的相应索引,它是一个元组,并检查该元组的零索引。这被添加到权重中,并且它小于或等于容量,我们进入if块。

同样,索引用于访问其他列表中的特定项目,如前所述。