Question about nested loop

Hans Mulder hansmu at xs4all.nl
Mon Dec 31 13:59:34 CET 2012


On 31/12/12 11:02:56, Isaac Won wrote:
> Hi all,
> I am a very novice for Python. Currently, I am trying to read continuous
> columns repeatedly in the form of array. 
> my code is like below:
> 
> import numpy as np
> 
> b = [] 
> c = 4
> f = open("text.file", "r")
> 
> while c < 10:
>         c = c + 1
> 
>         for  columns in ( raw.strip().split() for raw in f ):
>                 b.append(columns[c])
> 
>         y = np.array(b, float)
>         print c, y
> 
> 
> I thought that  can get the arrays of the columns[5] to [10], but I only
> could get repetition of same arrays of columns[5].
> 
> The result was something like:
> 
> 5 [1 2 3 4 ......, 10 9 8]
> 6 [1 2 3 4 ......, 10 9 8]
> 7 [1 2 3 4 ......, 10 9 8]
> 8 [1 2 3 4 ......, 10 9 8]
> 9 [1 2 3 4 ......, 10 9 8]
> 10 [1 2 3 4 ......, 10 9 8]
> 
> 
> What I can't understand is that even though c increased incrementally upto 10,
> y arrays stay same.
> 
> Would someone help me to understand this problem more?

That's because the inner loop read from a file until his reaches
the end of the file.  Since you're not resetting the file pointer,
during the second and later runs of the outer loop, the inner loop
starts at the end of the file and terminates without any action.

You'd get more interesting results if you rewind the file:

import numpy as np

b = []
c = 4
f = open("text.file", "r")

while c < 10:
        c = c + 1

        f.seek(0,0)
        for  columns in ( raw.strip().split() for raw in f ):
                b.append(columns[c])

        y = np.array(b, float)
        print c, y

It's a bit inefficient to read the same file several times.
You might consider reading it just once.  For example:

import numpy as np

b = []

f = open("text.file", "r")
data = [ line.strip().split() for line in f ]
f.close()

for c in xrange(5, 11):
        for row in data:
                b.append(row[c])

        y = np.array(b, float)
        print c, y


Hope this helps,

-- HansM






More information about the Python-list mailing list