Nested Loops

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
4 messages Options
W G
Reply | Threaded
Open this post in threaded view
|

Nested Loops

W G
Hello,

The follow code willl read lines of two text files. It supposed to take the
first line of the first text file and compare it to all the lines of the
second text file, then go to the next line of the first text file and do the
same and so on.

The problem is that once the inner loop is finished, it never goes in that
loop again. Any suggestions?

Thank you,
Wes


The Code:


for refSymbol in symbols.readlines():
    for lookupSymbol in myfile.readlines():
        showme = lookupSymbol.split('\t')
        if showme[3] == refSymbol.strip():
            priceNew.write(refSymbol.strip()+" "+showme[10])


_________________________________________________
Python.NET mailing list - [hidden email]
http://mail.python.org/mailman/listinfo/pythondotnet
Reply | Threaded
Open this post in threaded view
|

Re: Nested Loops

Thane Plummer
Read in the first file and create a dictionary (hash) of each line.
Read in the second file and for each line see if the dictionary contains the
item.  This solution minimizes your I/O.

Python 2.4b1 (#57, Oct 15 2004, 15:23:38) [MSC v.1310 32 bit (Intel)] on
win32
Type "help", "copyright", "credits" or "license" for more information.
>>> refsymbol = [1,2,3,4]
>>> refdict = dict()
>>> for sym  in refsymbol:
... refdict[sym] = sym
...
>>> refdict
{'a': 'a', 'c': 'c', 'b': 'b', 'd': 'd'}
>>> showme = ['d','e','f']
>>> for s in showme:
... if refdict.has_key(s):
... print s
...
d
>>>

> -----Original Message-----
> From: [hidden email] [mailto:pythondotnet-
> [hidden email]] On Behalf Of W G
> Sent: Tuesday, November 29, 2005 2:53 PM
> To: [hidden email]
> Subject: [Python.NET] Nested Loops
>
> Hello,
>
> The follow code willl read lines of two text files. It supposed to take
> the
> first line of the first text file and compare it to all the lines of the
> second text file, then go to the next line of the first text file and do
> the
> same and so on.
>
> The problem is that once the inner loop is finished, it never goes in that
> loop again. Any suggestions?
>
> Thank you,
> Wes
>
>
> The Code:
>
>
> for refSymbol in symbols.readlines():
>     for lookupSymbol in myfile.readlines():
>         showme = lookupSymbol.split('\t')
>         if showme[3] == refSymbol.strip():
>             priceNew.write(refSymbol.strip()+" "+showme[10])
>
>
> _________________________________________________
> Python.NET mailing list - [hidden email]
> http://mail.python.org/mailman/listinfo/pythondotnet

_________________________________________________
Python.NET mailing list - [hidden email]
http://mail.python.org/mailman/listinfo/pythondotnet
Reply | Threaded
Open this post in threaded view
|

Re: Nested Loops

michael_sweeney
In reply to this post by W G
I like the idea of using a dictionary as a solution to the problem.

The reason you are not seeing the nested loop run twice is because of the following:

>>> fd = file("C:\\defragreport.txt")
>>> fd.readlines()
['11/29/2005\n', '\n', '10:32:32 PM\n', '\n', 'Drive C: Defrag completed successfully\n', '\n']
>>> fd.readlines()
[]
>>>

When you call "readlines()" on the open file, it reads the contents of the complete file. Calling it again returns an empty list. You would have to open/read/close the file in each pass. Thus, the dictionary solution saves you from doing this.

Mike

> -----Original Message-----
> From: [hidden email] [mailto:pythondotnet-
> [hidden email]] On Behalf Of Thane
> Sent: Wednesday, November 30, 2005 2:51 PM
> To: 'W G'; [hidden email]
> Subject: Re: [Python.NET] Nested Loops
>
> Read in the first file and create a dictionary (hash) of each line.
> Read in the second file and for each line see if the dictionary contains
> the
> item.  This solution minimizes your I/O.
>
> Python 2.4b1 (#57, Oct 15 2004, 15:23:38) [MSC v.1310 32 bit (Intel)] on
> win32
> Type "help", "copyright", "credits" or "license" for more information.
> >>> refsymbol = [1,2,3,4]
> >>> refdict = dict()
> >>> for sym  in refsymbol:
> ... refdict[sym] = sym
> ...
> >>> refdict
> {'a': 'a', 'c': 'c', 'b': 'b', 'd': 'd'}
> >>> showme = ['d','e','f']
> >>> for s in showme:
> ... if refdict.has_key(s):
> ... print s
> ...
> d
> >>>
>
> > -----Original Message-----
> > From: [hidden email] [mailto:pythondotnet-
> > [hidden email]] On Behalf Of W G
> > Sent: Tuesday, November 29, 2005 2:53 PM
> > To: [hidden email]
> > Subject: [Python.NET] Nested Loops
> >
> > Hello,
> >
> > The follow code willl read lines of two text files. It supposed to take
> > the
> > first line of the first text file and compare it to all the lines of the
> > second text file, then go to the next line of the first text file and do
> > the
> > same and so on.
> >
> > The problem is that once the inner loop is finished, it never goes in
> that
> > loop again. Any suggestions?
> >
> > Thank you,
> > Wes
> >
> >
> > The Code:
> >
> >
> > for refSymbol in symbols.readlines():
> >     for lookupSymbol in myfile.readlines():
> >         showme = lookupSymbol.split('\t')
> >         if showme[3] == refSymbol.strip():
> >             priceNew.write(refSymbol.strip()+" "+showme[10])
> >
> >
> > _________________________________________________
> > Python.NET mailing list - [hidden email]
> > http://mail.python.org/mailman/listinfo/pythondotnet
>
> _________________________________________________
> Python.NET mailing list - [hidden email]
> http://mail.python.org/mailman/listinfo/pythondotnet


_________________________________________________
Python.NET mailing list - [hidden email]
http://mail.python.org/mailman/listinfo/pythondotnet
Reply | Threaded
Open this post in threaded view
|

Re: Nested Loops

J. Merrill
In reply to this post by W G
I'm confused.  If you do (using W G's variable names)
    for refSymbol in symbols.readlines():
       print refSymbol
won't all the lines be printed?  Doesn't the "for" loop process once for each item in the array returned by readlines (changing refSymbol each time through the loop), thus accomplishing what was desired?

It would seem right to me to store the result of myfile.readlines before doing the outer loop, so it's not read each time through the loop through the lines of the symbols file.

Isn't there an idiom to remove the trailing \n chars (and to completely remove the "lines" that are only a newline)?  I've been Ruby-ing too much to remember the Python idiom for that.

At 06:55 PM 11/30/2005, [hidden email] wrote

>I like the idea of using a dictionary as a solution to the problem.
>
>The reason you are not seeing the nested loop run twice is because of the following:
>
>>>> fd = file("C:\\defragreport.txt")
>>>> fd.readlines()
>['11/29/2005\n', '\n', '10:32:32 PM\n', '\n', 'Drive C: Defrag completed successfully\n', '\n']
>>>> fd.readlines()
>[]
>>>>
>
>When you call "readlines()" on the open file, it reads the contents of the complete file. Calling it again returns an empty list. You would have to open/read/close the file in each pass. Thus, the dictionary solution saves you from doing this.
>
>Mike
>
>
>> > -----Original Message-----
>> > From: [hidden email] [mailto:pythondotnet-
>> > [hidden email]] On Behalf Of W G
>> > Sent: Tuesday, November 29, 2005 2:53 PM
>> > To: [hidden email]
>> > Subject: [Python.NET] Nested Loops
>> >
>> > Hello,
>> >
>> > The follow code willl read lines of two text files. It supposed to take
>> > the
>> > first line of the first text file and compare it to all the lines of the
>> > second text file, then go to the next line of the first text file and do
>> > the
>> > same and so on.
>> >
>> > The problem is that once the inner loop is finished, it never goes in
>> that
>> > loop again. Any suggestions?
>> >
>> > Thank you,
>> > Wes
>> >
>> >
>> > The Code:
>> >
>> >
>> > for refSymbol in symbols.readlines():
>> >     for lookupSymbol in myfile.readlines():
>> >         showme = lookupSymbol.split('\t')
>> >         if showme[3] == refSymbol.strip():
>> >             priceNew.write(refSymbol.strip()+" "+showme[10])


J. Merrill / Analytical Software Corp

_________________________________________________
Python.NET mailing list - [hidden email]
http://mail.python.org/mailman/listinfo/pythondotnet