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: | ||