[Python 2.7.3] What's the difference between these two uses of "for"?
Roy Smith
roy at panix.com
Sun Mar 17 21:28:56 EDT 2013
In article <485a3093-8c07-4d1a-b49e-af32f84f8198 at googlegroups.com>,
"Yves S. Garret" <yoursurrogategod at gmail.com> wrote:
> N00b question. But here is the code:
>
> http://bin.cakephp.org/view/709201806
>
> In the first example, the first for-loop is run and then the list is assigned
> to the tricky variable. But, what
> happens in the second example? Does the loop after "in" get run only once or
> multiple number of times?
It's a little hard to answer your question because you're not using the
right terminology. When you say, 'the loop after "in"', I assume you
mean:
[w for w in set(text2) if 'cie' in w or 'cei' in w]
yes? That's not what most people would call "a loop". It's a list
comprehension. For sure, there's an implied looping over the elements
of set(text2) in there, but that's not the way people refer to it.
Anyway, here's what happens. Working from the inside out...
First, set(text2) is evaluated. I assume text2 is something like a list
of strings, or at least iterable which yields strings. This results in
a set object being created. Let's call that set S.
Next, the list comprehension gets evaluated:
[w for w in s if 'cie' in w or 'cei' in w]
This iterates over the the elements of s and forms a list out of those
elements which pass the condition in the 'if' clause. This results in a
list object being created. Let's call that L1
Next, sorted(L1) is evaluated. This returns another list (call it L2).
Finally, we get to:
for word in L2:
print word,
This iterates over all the elements in L2, assigning each one, in turn
to word, and executing the body of the for statement.
Does that answer your question? I'm sure other people will point out
that this is not the most efficient way to do this (your way is not
wrong, it's just not the most efficient way). There's a way to write
this which avoids creating L1. That could be important if there's a
large amount of data involved.
But, make sure you fully understand what's happing in the example you
gave before you move on to the next step.
More information about the Python-list
mailing list