[Tutor] A list in list problem
Dave S
pythontut at pusspaws.net
Mon Aug 21 18:28:34 CEST 2006
On Monday 21 August 2006 13:58, János Juhász wrote:
> Hi Dave,
>
> > From: dave s <pythontut at pusspaws.net>
> > Subject: [Tutor] A list in list problem
> > To: python tutor <tutor at python.org>
> > Message-ID: <200608210959.01834.pythontut at pusspaws.net>
> > Content-Type: text/plain; charset="us-ascii"
> >
> > def CSV_Lines(self, csv, from_, to):
> > """Returns a list of cleaned up lines from csv 'from_' line
> > number 'to' line number"""
> >
> > clean_line = clean_csv = []
> > for string in range(from_, to):
> > split_string = csv[string].split(',')
> > split_string = split_string[1:-1] # Strip the LHS column
>
> + the /n'
>
> > if split_string[0] == '' : continue # Skip empty lines
> > print '##########################'
> > print 'split_string ', split_string
> > for string in split_string:
> > if len(string) > 0:
>
> clean_line.append(string[1:-1])
>
> > print 'clean_line ',clean_line
> > clean_csv.append(clean_line)
> > print 'clean_csv ',clean_csv
> > clean_line = []
> >
> > But I get clean_csv trouble ...
> >
> > ubuntu at ubuntu:~/python_develop/unison/PxQxAudit/main$ ./crosscheck.py
> > ##########################
> > split_string ['"temp1"', '"wow a variable"', '', '', '']
> > clean_line ['temp1', 'wow a variable']
> > clean_csv ['temp1', 'wow a variable', [...]]
> > ##########################
> > split_string ['"temp2"', '', '', '', '']
> > clean_line ['temp2']
> > clean_csv ['temp1', 'wow a variable', [...], ['temp2']]
> > ubuntu at ubuntu:~/python_develop/unison/PxQxAudit/main$
> >
> > ie clean_csv ends up as ['temp1', 'wow a variable', [...], ['temp2']]
>
> instead
>
> > of [[temp1, wow a variable], [temp2]]
>
> You have used string as variable name two times, once as an integer and
> once as a field in the line.
> It should be avoided.
>
> I like list comprehension in this case.
>
> def CSV_Lines2(csv, from_, to):
> csv = csv[from_ : to] # We are
> interested just here
> csv = [line.split(',') for line in csv] # Make a 2D array from the
> list
> return [LineItems[1:-1] for LineItems in csv if len(LineItems) > 2]
> # filter out first and last columns, and lines with
> too less items
>
That is so neat, and a lot more elegant than my code ! - It may well be ahem
Incorporated into my app :) I always seem to see codeing from my particular
angle - I would never have dreamt of doing it that way. Thank you
Dave
>
>
> csv = """Header1
> Header2
> temp1,12,20,1
> temp2,22,22,2
> temp3,33,44,3
> temp4,34,64,4
> Footer1
> Footer2"""
>
> csv = csv.split('\n')
> print CSV_Lines2(csv, 2, 6)
>
> >>>[['12', '20'], ['22', '22'], ['33', '44'], ['34', '64']]
>
> Yours sincerely,
> ______________________________
> Janos Juhasz
More information about the Tutor
mailing list