This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
python3:list_comprehensions [2019/05/07 13:57] jguerin Added several list-comprehension examples. |
python3:list_comprehensions [2019/05/07 16:19] (current) jguerin Moved the multiple loop example, switched x*2 to abs(x) in list example. |
||
---|---|---|---|
Line 20: | Line 20: | ||
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81] | [0, 1, 4, 9, 16, 25, 36, 49, 64, 81] | ||
</ | </ | ||
+ | |||
+ | |||
+ | |||
+ | ===== Example Functionality ===== | ||
==== Multiple Loops ==== | ==== Multiple Loops ==== | ||
- | Note that this basic syntax is easily extended to multiple loops and variables: | ||
<code python> | <code python> | ||
>>> | >>> | ||
Line 28: | Line 31: | ||
</ | </ | ||
- | ===== Examples | + | ====Conditionals==== |
- | Conditionals: | + | |
<code python> | <code python> | ||
>>> | >>> | ||
Line 35: | Line 37: | ||
</ | </ | ||
- | Repetitions: | + | ====Repetitions==== |
<code python> | <code python> | ||
>>> | >>> | ||
Line 41: | Line 43: | ||
</ | </ | ||
- | Processing non-range() iterables: | + | ====Processing non-range() iterables==== |
<code python> | <code python> | ||
>>> | >>> | ||
- | >>> | + | >>> |
- | [-8, -4, 0, 4, 8] | + | [4, 2, 0, 2, 4] |
</ | </ | ||
- | Flattening a double list: | + | |
+ | ====Creating a double list==== | ||
+ | <code python> | ||
+ | >>> | ||
+ | >>> | ||
+ | [[0, 1, 2], [3, 4, 5], [6, 7, 8]] | ||
+ | </ | ||
+ | |||
+ | ====Flattening a double list==== | ||
<code python> | <code python> | ||
>>> | >>> | ||
Line 55: | Line 65: | ||
</ | </ | ||
+ | ==== Benchmarks ==== | ||
+ | List comprehensions are typically faster than their loop-based counterparts, | ||
+ | |||
+ | <file python square_comprehension.py> | ||
+ | n = int(10000) | ||
+ | squares = [([(x**2, y**2) for x in range(n) for y in range(n)])] | ||
+ | </ | ||
+ | |||
+ | <file python square_loop.py> | ||
+ | n = int(argv[1]) | ||
+ | |||
+ | squares = [] | ||
+ | |||
+ | for i in range(n): | ||
+ | for j in range(n): | ||
+ | squares.append((i**2, | ||
+ | </ | ||
+ | |||
+ | ^ %%n%% ^ square_comprehension.py((Python 3.5.2)) | ||
+ | ^ 500 | .1864s | ||
+ | ^ 1000 | .7104s | ||
+ | ^ 1500 | 1.572s | ||
+ | ^ 2000 | 2.7992 | ||
+ | |||
+ | Note that both of the above examples require storage of (potentially) millions of tuples. Many problems will not necessarily require //storage// of this many values in memory, but instead iterating over them. In such an instances iteration using for loops or [[python3: |