Trouble with list comprehension

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Shane Lillie

    Trouble with list comprehension

    I've got a bit of code that looks like this:

    for i in xrange(1000):
    # shuffle the doors
    doors = [ 'G', 'C', 'G' ]
    random.shuffle( doors)

    # save the doors that have goats (by index)
    goats = [ x for x in range(2) if doors[x] == 'G' ]

    but for some reason the list comprehension is not always returning a
    list with 2 elements in it (sometimes it will be just 1 element). I've
    tried changing to a generator as well as using filter() and all 3 give
    the same sort of results. It works if I use a loop, but I'd really
    like to know what I'm doing wrong here. Everything looks like it
    should be working.

    Thanks in advance for any suggestions.
  • Jeffrey Froman

    #2
    Re: Trouble with list comprehension

    Shane Lillie wrote:
    goats = [ x for x in range(2) if doors[x] == 'G' ]
    >
    but for some reason the list comprehension is not always returning a
    list with 2 elements in it (sometimes it will be just 1 element).
    The problem here is with your usage of the range() function. You provide an
    endpoint of 2, but that endpoint is not included in the range. Thus, you
    are only checking the indexes 0 and 1. You'll get two results when those
    two indexes are 'G', and one otherwise. You want range(3).

    By the way, the enumerate() function is good for this task, as it does not
    require you to know the length of your list in advance:

    goats = [index for index, item in enumerate(doors )]

    --
    Jeffrey

    Comment

    Working...