# Re: looping through a list of lists.

Discussion in 'Python' started by Rob Hunter, Oct 8, 2003.

1. ### Rob HunterGuest

The responder to this post has a cool way of doing it, but it won't
work (I believe) if you have an arbitrary number of sublists. Can you
clarify the problem? Do you have an arbitrary number of sublists? Or
is it always 3?

Rob

On Wednesday, October 8, 2003, at 11:04 AM, saoirse_79 wrote:

> I have a list of lists as follows:
> [['-', '-', '-', '-', '-', '-', '-', 'K', 'S', 'A', 'K'],
> ['-', '-', '-', '-', 'L', 'Q', 'Q', 'T', 'N', 'S', 'E'],
> ['T', 'L', 'E', 'E', 'L', 'M', 'K', 'L', 'S', 'P', 'E']]
> I want to be able to read each character and compare it with all
> characters at the same positon in all sublists. Is this possible.
> I have tried a few different methods but nothing seems to allow me to
> compare the sublists character by character.
>
>
>
>
> --
> http://mail.python.org/mailman/listinfo/python-list
>

Rob Hunter, Oct 8, 2003

2. ### Peter OttenGuest

Rob Hunter wrote:

> The responder to this post has a cool way of doing it, but it won't
> work (I believe) if you have an arbitrary number of sublists. Can you
> clarify the problem? Do you have an arbitrary number of sublists? Or
> is it always 3?

I you are referring to the zip trick posted by ,
it *does work for an arbitrary number of sublists, but not for
arbitrary-length sublists:

>>> for loc in zip(*"alpha beta gamma delta".split()):

.... print loc
....
('a', 'b', 'g', 'd')
('l', 'e', 'a', 'e')
('p', 't', 'm', 'l')
('h', 'a', 'm', 't')
>>>

Peter

Peter Otten, Oct 8, 2003

3. ### anton muhinGuest

Peter Otten wrote:

> Rob Hunter wrote:
>
>
>>The responder to this post has a cool way of doing it, but it won't
>>work (I believe) if you have an arbitrary number of sublists. Can you
>>clarify the problem? Do you have an arbitrary number of sublists? Or
>>is it always 3?

>
>
> I you are referring to the zip trick posted by ,
> it *does work for an arbitrary number of sublists, but not for
> arbitrary-length sublists:
>
>
>>>>for loc in zip(*"alpha beta gamma delta".split()):

>
> ... print loc
> ...
> ('a', 'b', 'g', 'd')
> ('l', 'e', 'a', 'e')
> ('p', 't', 'm', 'l')
> ('h', 'a', 'm', 't')
>
>
> Peter

Consider the following:

PythonWin 2.2.2 (#37, Nov 26 2002, 10:24:37) [MSC 32 bit (Intel)] on win32.
Portions Copyright 1994-2001 Mark Hammond () -
>>> l = [range(0, 5), range(1, 7), range(3, 5)]
>>> l

[[0, 1, 2, 3, 4], [1, 2, 3, 4, 5, 6], [3, 4]]
>>> for e in zip(*l):

.... print e
....
(0, 1, 3)
(1, 2, 4)
>>> for e in map(None, *l): print e

....
(0, 1, 3)
(1, 2, 4)
(2, 3, None)
(3, 4, None)
(4, 5, None)
(None, 6, None)
>>>

It pads missing elements with Nones. Is it what you need?

zip(*l) is similar to zip(l[0], l[1], ...., l[len(l) - 1])---it
substitutes list elements to function parameters.

HTH,
anton.

anton muhin, Oct 8, 2003