When is List Comprehension inappropriate?

Paul McGuire ptmcg at austin.rr.com
Mon Mar 19 16:43:33 CET 2007


On Mar 19, 9:41 am, "Ben" <bensher... at gmail.com> wrote:
> even = []
> for x in range(0,width,2):
>     for y in range(0,height,2):
>         color = im.getpixel((x,y))
>         even.append(((x,y), color))
>
> versus list comprehension:
>
> even2 = [((x,y), im.getpixel((x,y))) for x in range(0,width,2) for y
> in range(0,height,2)]
>

To simplify access to individual pixels, you can make even2 into a
dict using:

  even2asDict = dict(even2)

and then you can directly get the pixel in the 4th row, 5th column
(zero-based) as:

  even2asDict[(4,5)]

If you really want something more like a 2-D array, then create a list
comp of lists, as in:

  even2 = [ [im.getpixel((x,y)) for x in range(0,width,2) ]
             for y in range(0,height,2) ]

which allows you to use list indexing to get individual pixel values,
as in:

  even2[4][5]

to get the same pixel as above.

-- Paul




More information about the Python-list mailing list