How to parse this line of code manually

Davy zhushenli at gmail.com
Wed Aug 29 05:09:55 EDT 2007


On Aug 28, 7:28 pm, Dustan <DustanGro... at gmail.com> wrote:
> On Aug 28, 2:59 am, "A.T.Hofkamp" <h... at se-162.se.wtb.tue.nl> wrote:
>
>
>
>
>
> > On 2007-08-28, Davy <zhushe... at gmail.com> wrote:
>
> > > On Aug 28, 11:00 am, Davy <zhushe... at gmail.com> wrote:
> > >> Hi all,
>
> > >> It is well known that Python is appreciated for its merit of concise.
> > >> However, I found the over concise code is too hard to understand for
> > >> me.
>
> > >> Consider, for instance,
> > >> def known_edits2(word):
> > >>     return set(e2 for e1 in edits1(word) for e2 in edits1(e1) if e2 in
> > >> NWORDS)
>
> > >> Shall I understand the code in set() as
> > >> for e2 in edits1(e1) {
> > >>     if e2 in NWORDS {
> > >>         for e1 in edits1(word) {
> > >>              e2
> > >>         }
> > >>     }
>
> > >> }
>
> > > [SNIP]
> > > Hi all, I figured it myself. It is left to righ parse, right?
> > > So the above one is like
> > > for e1 in edits1(word) {
> > >     for e2 in edits1(e1) {
> > >         if e2 in NWORDS {
> > >             push e2 to set
> > >         }
> > >     }
> > > }
>
> > This is correct, although I am not sure what language you are using here, it
> > looks like a strange mix of Python and C to me.
>
> > >> Any suggestions are welcome!
>
> > The idea is known as List comprehension (for lists, obviously), and comes from
> > functional programming, Bird & Wadler used it in their book.
>
> > The notation is very close to mathematics:
>
> >  { e2 | e1: edits(word), e2: edits(e1) in NWORDS }
>
> > or in LaTeX:
>
> > $\{ e_2 | \forall e_1: \mathrm{edits}(\mathrm{words}),
> >           \forall e_2: \mathrm{edits}(e_1) \in \mathrm{NWORDS} \}$
>
> > :-)
>
> > (which in words is something like: collect values e2, where e1 comes from
> > 'edits(word)', e2 comes from 'edits(e1)', and e2 in NWORDS)
>
> For more examples:http://docs.python.org/tut/node7.html#SECTION007140000000000000000
[SNIP]
Hi Hofkamp and Dustan,

Thank you for your help :)

Davy
>
> A 'list comprehension' with parentheses instead of square-brackets
> creates a generator instead of a list, which can be more memory-
> efficient and allows for lazy evaluation.- Hide quoted text -
>
> - Show quoted text -





More information about the Python-list mailing list