newb loop problem

Sion Arrowsmith siona at chiark.greenend.org.uk
Wed Aug 13 08:46:32 EDT 2008


Dave  <NunezD at gmail.com> wrote:
>hitNum = 0
>stopCnt = 6 + hitNum
>offSet = 5
>
>for i in range(0,10,1):

The step argument to range defaults to 1: it's tidier to omit it.
Similarly, the start argument defaults to 0, so you can drop that too.

for i in range(10):

>	for x in range(hitNum,len(inLst), 1):
>		print hitNum, stopCnt

hitNum and stopCnt are constant in this loop: if you care about
this print statement, move it into the outer loop and stop yourself
drowning in output.

>		if x == stopCnt: break

If you want to exit the inner loop when x == stopCnt, why not make
that condition part of the loop construct?

for x in range(hitNum, stopCnt):

That said, if you ever see "for i in range(len(lst))" *immediately*
replace it by "for i, x in enumerate(lst)", then go through to body
to see if you really need that i, and if not use "for x in lst",
with slicing if the range is more complex than range(len(lst)). As
you can do here:

for x in inLst[hitNum:stopCnt]:
	hitLst.append(x)

And if all you're doing in a for loop is appending to one list from
another, that's just what list.extend does:

hitLst.extend(inLst[hitNum:stopCnt])

>	hitNum +=offSet
>	stopCnt+=offSet

Finally, that i in the outer loop isn't being used anywhere. Why
don't you just loop over hitNum? And noticing that stopCnt is
increasing in lock-step with hitNum:

offset = 5

for hitNum in range(0, 10*offset, offset):
	hitLst.extend(inLst[hitNum:hitNum+6]

-- 
\S -- siona at chiark.greenend.org.uk -- http://www.chaos.org.uk/~sion/
   "Frankly I have no feelings towards penguins one way or the other"
        -- Arthur C. Clarke
   her nu becomeþ se bera eadward ofdun hlæddre heafdes bæce bump bump bump



More information about the Python-list mailing list