【问题标题】:Python for loop start counter initializationPython for 循环启动计数器初始化
【发布时间】:2013-07-06 00:24:06
【问题描述】:
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)

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

【问题讨论】:

  • 当你说range(15)(例如)时,它实际上是range(0,15)。仅使用一个参数可以为您(程序员)简化它,但实际上是后者。您应该将其简化为for index in range(iteration + 1, len(myList)):。另外,尽量不要像这里那样重用变量名。当您说for index in... 时,您重置了之前给它的索引的值。正如我假设你所想的那样,在for 循环中设置索引不会影响它的起始值。 index 的值更改为默认值range(oneArg):0,第一个值为 2 个参数。

标签: python loops for-loop


【解决方案1】:

for index in range(len(list)) 循环执行循环体,首先将index 设置为0,然后设置1,然后设置2,以此类推,直到len(list) - 1index 的先前值被忽略并覆盖。如果您希望indexiteration + 1 开头,请使用range 的2 参数形式:

for index in range(iteration + 1, len(list)):

【讨论】:

    【解决方案2】:

    你真的应该使用 enumerate 来处理这样的事情,因为你可以同时循环遍历索引和值(这样可以省去使用两个 for 循环的麻烦)。

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

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

    【讨论】:

      【解决方案3】:

      试试这个:

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

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

      【讨论】:

        【解决方案4】:
        for index in range(iteration + 1, len(list))
        

        【讨论】:

        • 另外,arshajii 对保留关键字“list”的评价
        • list 不是关键字。它是一个内置标识符;重新分配它是有效的,但通常是个坏主意。
        【解决方案5】:

        我赞成 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)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-09-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多