2013-07-06 24 views
2
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开始。请求专家评论。Python for循环启动计数器初始化

+0

当你说'范围(15)'(例如)时,它确实说'范围(0,15)'。只使用一个参数为你(程序员)简化它,但它确实在说后者。你应该将它简化为'用于范围内的索引(iteration + 1,len(myList)):'。另外,尽量不要像你在这里那样重用变量名称。当你说'在...中索引'时,你重置之前给出的索引值。正如我假设你想的那样,在之前设置索引不会影响'for'循环中的起始值。 index的值被更改为'range(oneArg)':0的默认值,并且带有2个参数,即第一个值。 – erdekhayser

回答

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

另外,arshajii对保留关键字的说法,“list” – bojangler

+0

'list'不是关键字。这是一个内建的标识符;重新分配它是有效的,但通常是一个坏主意。 – user2357112

0

试试这个:

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

index被该for -loop所以index = iteration + 1内重新分配无论如何不会有任何影响。

6

for index in range(len(list))环与index第一组到0,然后1,然后2等,至多len(list) - 1执行循环体。之前的值index被忽略并被覆盖。如果你想indexiteration + 1开始,使用的range 2个参数的形式:

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

你真的应该使用enumerate像这样的东西,你可以通过在同一时间索引和值循环(这将为您节省使用两个for-loop的麻烦)。

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

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