Drew wrote: > On Apr 11, 11:27 pm, Steven Bethard <[EMAIL PROTECTED]> wrote: >> Drew wrote: >>> def known_edits2(word): >>> return set(e2 for e1 in edits1(word) for e2 in edits1(e1) if e2 in >>> NWORDS) >> >> This is the same as: >> >> result = set() >> for e1 in edits1(word): >> for e2 in edits1(e1): >> if e2 in NWORDS: >> result.add(e2) >> return result >> >> The thing between the ``set(`` and ``)`` is called a generator >> comprehension if you'd like to look into it further. > > Thanks for the response. I'm somewhat familiar with generator/list > comprehension but was unsure how multiple statements were evaluated > when chained together. From your explanation, I'm assuming they are > evaluated from the "inside out" rather than left to right or right to > left. > > Does the mean that the comprehension on the inside is always evaluated > first?
Not really (at least for the most literal interpretation of ``evaluated first``). I find it easiest to think of translating them into regular for loops by adding the appropriate indentation. Starting with: (e2 for e1 in edits1(word) for e2 in edits1(e1) if e2 in NWORDS) Adding newlines: (e2 for e1 in edits1(word) for e2 in edits1(e1) if e2 in NWORDS) Adding indentation: (e2 for e1 in edits1(word) for e2 in edits1(e1) if e2 in NWORDS) Moving the add/append to the bottom: for e1 in edits1(word) for e2 in edits1(e1) if e2 in NWORDS e2 Adding the remaining boiler-plate: result = set() for e1 in edits1(word): for e2 in edits1(e1): if e2 in NWORDS: result.add(e2) So multiple for- and if-expressions are evaluated in the same order that they would normally be in Python, assuming the proper whitespace was added. HTH, STeVe -- http://mail.python.org/mailman/listinfo/python-list