28.02.18 00:27, Chris Angelico пише:
Example usage
=============

These list comprehensions are all approximately equivalent::

     # Calling the function twice
     stuff = [[f(x), f(x)] for x in range(5)]

The simplest equivalent of [f(x), f(x)] is [f(x)]*2. It would be worth to use less trivial example, e.g. f(x) + x/f(x).

     # Helper function
     def pair(value): return [value, value]
     stuff = [pair(f(x)) for x in range(5)]

     # Inline helper function
     stuff = [(lambda v: [v,v])(f(x)) for x in range(5)]

     # Extra 'for' loop - see also Serhiy's optimization
     stuff = [[y, y] for x in range(5) for y in [f(x)]]

     # Expanding the comprehension into a loop
     stuff = []
     for x in range(5):
         y = f(x)
stuff.append([y, y])

     # Using a statement-local name
     stuff = [[(f(x) as y), y] for x in range(5)]


Other options:

    stuff = [[y, y] for y in (f(x) for x in range(5))]

    g = (f(x) for x in range(5))
    stuff = [[y, y] for y in g]

    def g():
        for x in range(5):
            y = f(x)
            yield [y, y]
    stuff = list(g)

Seems the two last options are generally considered the most Pythonic. map() and itertools can be helpful in particular cases.

_______________________________________________
Python-ideas mailing list
Python-ideas@python.org
https://mail.python.org/mailman/listinfo/python-ideas
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to