<br><br><div><span class="gmail_quote">On 3/8/06, <b class="gmail_sendername">Christopher Spears</b> &lt;<a href="mailto:cspears2002@yahoo.com">cspears2002@yahoo.com</a>&gt; wrote:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
I copied this program from Learning Python and got it<br>to work on Windows XP:<br><br>import sys, glob<br>print sys.argv[1:]<br>sys.argv = [item for arg in sys.argv for item in<br>glob.glob(arg)]<br>print sys.argv[1:]<br>
<br>What the program does is first print the glob and then<br>a list of everything caught by the glob.&nbsp;&nbsp;For example:<br><br>['*.py']<br>['showglob.py']<br><br>The key to the script is the list comprehension, which<br>I am having trouble dissecting.&nbsp;&nbsp;How do I go about
<br>trying to figure out how it works?</blockquote><div><br>
<br>
Hi Christopher,<br>
<br>
Others have ably deciphered this particular list comprehension (LC) for
you. I'm curious though, are you having trouble because this is a
nested list comprehension or do you not have a good grasp on LCs in
general? They can be a little tricky to grok at first. <br>
<br>
In case you're not completely clear on LCs in general, here's a bit
more description. If you are clear, just skip to the next email. ;-)<br>
<br>
<br>
First off - a list comprehension creates a new list. It does so by
pulling items from an existing list or other iterable object.&nbsp; So,
for example:<br>
<br>
</div>newlist = [item for item in oldlist]<br>
print newlist<br>
<br>
This example wasn't terribly useful - it just made a new list. You can,
however, *do* stuff to the item as you're passing it to the new list.
For example, if you want the squares of the items in the old list, you
coudl do:<br>
<br>
oldlist = [1,2,3]<br>
sqlist = [item*item for item in oldlist]<br>
<br></div><br>
Another thing you can do is filter the items in the old list in some way. So, if you only want the even numbers you could do:<br>
<br>
elist = [item for item in oldlist if item%2==0] # using modulo, which returns the remainder<br>
<br>
You can use LCs with files, with dicts, with strings, with any iterable
object. It's really slick, really easy, pretty fast.&nbsp; LCs can be a
little tricky, like I mentioned (especially when nested) but are quite
handy and fun once you get to know them. Just don't get so tricky that
it's hard to read your code. If it's getting hard to read, use a for
loop. <br>
<br>
HTH,<br>
Anna<br>