[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