5
for iteration in range(len(list) - 1):
  index = iteration +1 #This is the line which has no effect on the inner loop
  for index in range(len(list)):
    if list[iteration] > list[index]:
      newmin  = list[index]
      newminindex = index        
  if iteration != newminindex :
    swapnumbers(list,iteration, newminindex)

以上是我为选择排序算法编写的代码片段。但是我看到内部循环开始计数器总是从 0 开始。请求专家评论。

4

5 回答 5

9

for index in range(len(list))循环执行循环体,首先index设置为0,然后1,然后2,等等,直到len(list) - 1。之前的值index被忽略并覆盖。如果要从index开始iteration + 1,请使用 2 参数形式range

for index in range(iteration + 1, len(list)):
于 2013-07-06T00:27:49.667 回答
3

你真的应该使用enumeratefor 这样的东西,因为你可以同时循环遍历索引和值(这将节省你使用两个 for 循环的麻烦)。

for i, j in enumerate(list):
    print i, j

您的内部循环正在覆盖index您在第一个循环中定义的变量。

于 2013-07-06T00:28:18.260 回答
1

试试这个:

for index in range(iteration + 1, len(l)):  # don't use "list" as a name

index无论如何都在for-loop 中重新分配,因此index = iteration + 1没有任何效果。

于 2013-07-06T00:27:09.553 回答
0
for index in range(iteration + 1, len(list))
于 2013-07-06T00:26:42.567 回答
0

我会赞成 TerryA 的回答。但是我喜欢改进他的答案以满足 OP 要求并使其符合 Python3

他的起始计数器 1 的示例是:

for i, j in enumerate(list,1):
  print (i, j)

为了更容易理解,我将 i 和 j 替换为如下所示。它可能会更好地解释它:(两者都可以,但 i 和 j 代表什么并不明显)

for list_number, list_value in enumarate(list,1):
  print ("number ", list_number, " is  ", list_value)
于 2021-01-17T14:00:23.363 回答