Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python for loop start counter initialization

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)

The above is a code snippet I wrote for selection sort algorithm. However I see the inner loop start counter always starting from 0. Request for expert comment.

like image 689
user2555288 Avatar asked Jul 06 '13 00:07

user2555288


2 Answers

The for index in range(len(list)) loop executes the loop body with index first set to 0, then 1, then 2, etc. up to len(list) - 1. The previous value of index is ignored and overwritten. If you want index to start at iteration + 1, use the 2-argument form of range:

for index in range(iteration + 1, len(list)):
like image 137
user2357112 supports Monica Avatar answered Sep 30 '22 11:09

user2357112 supports Monica


You really should be using enumerate for stuff like this, as you can loop through the index and the value at the same time (which will save you the hassle of using two for-loops).

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

Your inner loop is overriding the variable index that you defined in the first loop.

like image 30
TerryA Avatar answered Sep 30 '22 09:09

TerryA