Skip to content

Instantly share code, notes, and snippets.

@ranabhat
Created November 6, 2020 10:27
Show Gist options
  • Save ranabhat/1cc36d28eeccd9c34a10824eead6c58c to your computer and use it in GitHub Desktop.
Save ranabhat/1cc36d28eeccd9c34a10824eead6c58c to your computer and use it in GitHub Desktop.
List Comprehension Formula

Simple list comprehensions

  • Problem
y = [0,1,2,3,4,5,6,7,8,9]
squares = []
for i in  y:
    squares.append(i**2)
print squares
  • Formula: [ expression-involving-loop-variableforloop-variableinsequence]
  • Equivalent to
results = []
for loop-variable in sequence:
    results.append(expression_involving_loop_variables)

This will step over every element of sequence, successively setting loop-variable equal to every element one at a time, and will then build up a list by evaluating expression-involving-loop-variable for each one

  • squares = [ x**2 for x in range(10) ] -->[0, 1, 4, 9, 16, 25, 36, 49, 64, 81

Nested list comprehensions

  • Formula: [expression-involving-loop-variablesforouter-loop-variableinouter-sequenceforinner-loop-variableininner-sequence]
  • Equivalent to
results = []
for outer_loop_variable in outer_sequence:
    for inner_loop_variable in inner_sequence:
        results.append( expression_involving_loop_variables )
  • coords = [ (x,y) for x in range(5) for y in range(3) ] --> [(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2), (3, 0), (3, 1), (3, 2), (4, 0), (4, 1), (4, 2)]

Filtered List comprehensions

  • Formula: [ expression-involving-loop-variableforloop-variableinsequence ifboolean-expression-involving-loop-variable]
  • Equivalent to
results = []
for loop-variable in sequence:
    if boolean-expression-involving-loop-variable:
        results.append(expression-involving-loop-variable)

OR,

new_list = []
for x in old_list:
    if condition(x):
    new_list.append(operation(x))

Same as:
new_list = [operation(x) for x in old_list if condition(x)]
names = ['Anne', 'Amy', 'Bob', 'David', 'Carrie', 'Barbara', 'Zach']
b_names = [ 
    name 
    for name in names
    if name.startswith('B') 
]
print('b_names') ---> ['Bob', 'Barbara']
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment