preallocate list

Jim jbo at cannedham.ee.ed.ac.uk
Thu Apr 14 06:16:18 EDT 2005


John Machin wrote:
> On Wed, 13 Apr 2005 14:28:51 +0100, Jim <jbo at cannedham.ee.ed.ac.uk>
> wrote:
> 
> 
>>Thanks for the suggestions. I guess I must ensure that this is my bottle 
>>neck.
>><code>
>>    def readFactorsIntoList(self,filename,numberLoads):
> 
> 
> 1. "numberLoads" is not used. 
> 
> 
>>	factors = []
>>        f = open(self.basedir + filename,'r')
>>        line = f.readline()
>>        tokens = line.split()
>>        columns = len(tokens)
>>        if int(columns) == number:
> 
> 
> 2. "columns" is already an int (unless of course you've redefined
> "len"!). Doing int(columns) is pointless.
> 3. What is "number"? Same as "numberLoads"?
> 4. Please explain in general what is the layout of your file and in
> particular, what is the significance of the first line of the file and
> of the above "if" test. 
> 
> 
>>            for line in f:
>>                factor = []
>>                tokens = line.split()
>>                for i in tokens:
>>                    factor.append(float(i))
> 
> 
> 4. "factor" is built and then not used any more??
> 
> 
>>                factors.append(loadFactor)
> 
> 
> 5. What is "loadFactor"? Same as "factor"?
> 
> 
>>        else:
>>            for line  in f:
>>                tokens = line.split()
>>                factors.append([float(tokens[0])] * number)
> 
> 
> 6. You throw away any tokens in the line after the first??
> 
> 
>>	return factors
>></code>
>>
>>OK. I've just tried with 4 lines and the code works.
> 
> 
> Which code works? The code you posted? Please define "works".
> 
> 
> 
>>With 11000 lines it 
>>uses all CPU for at least 30 secs. There must be a better way.
> 
> 
> Perhaps after you post the code that you've actually run, and
> explained what your file layout is, and what you are trying to
> achieve, then we can give you some meaningful help.
> 
> Cheers,
> 
> John
> 
> 
> 

Thanks for looking John. For that I should take a little time to explain.

I tried to rename the variables, some of them were four words long. I 
got a couple of the renames wrong. Sorry.

Regarding 'works'. I meant that with a text file of four lines the code 
completed. With my desired size 11000 lines it didn't complete within 
the limits of my patience. I didn't try any other size.

Also I perhaps wrongly use the newsgroup threads paradigm in trying to 
restart my query with extra information (that turned out a little faulty).

Luckily the other branches yielded fruit.

Thanks again
Jim




More information about the Python-list mailing list