By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
443,846 Members | 1,857 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 443,846 IT Pros & Developers. It's quick & easy.

Trouble with list comprehension

P: n/a
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.
Apr 9 '08 #1
Share this Question
Share on Google+
1 Reply


P: n/a
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
Apr 9 '08 #2

This discussion thread is closed

Replies have been disabled for this discussion.