# You (Probably) Don’t Need For-Loops

## What you gain by not writing for-loops everywhere

`with ...:    for ...:        if ...:            try:            except:        else:`

“Flat is better than nested” — The Zen of Python

# Tools you can use to avoid using for-loops

## 1. List Comprehension / Generator Expression

`result = []for item in item_list:    new_item = do_something_with(item)    result.append(new_item)`
`result = [do_something_with(item) for item in item_list]`
`result = (do_something_with(item) for item in item_list)`

## 2. Functions

`doubled_list = map(lambda x: x * 2, old_list)`
`from functools import reducesummation = reduce(lambda x, y: x + y, numbers)`
`>>> a = list(range(10))>>> a[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]>>> all(a)False>>> any(a)True>>> max(a)9>>> min(a)0>>> list(filter(bool, a))[1, 2, 3, 4, 5, 6, 7, 8, 9]>>> set(a){0, 1, 2, 3, 4, 5, 6, 7, 8, 9}>>> dict(zip(a,a)){0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9}>>> sorted(a, reverse=True)[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]>>> str(a)‘[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]’>>> sum(a)45`

## 3. Extract Functions or Generators

`results = []for item in item_list:    # setups    # condition    # processing    # calculation    results.append(result)`
`def process_item(item):    # setups    # condition    # processing    # calculation    return resultresults = [process_item(item) for item in item_list]`
`results = []for i in range(10):    for j in range(i):        results.append((i, j))`
`results = [(i, j)           for i in range(10)           for j in range(i)]`
`# finding the max prior to the current itema = [3, 4, 6, 2, 1, 9, 0, 7, 5, 8]results = []current_max = 0for i in a:    current_max = max(i, current_max)    results.append(current_max)# results = [3, 4, 6, 6, 6, 9, 9, 9, 9, 9]`
`def max_generator(numbers):    current_max = 0    for i in numbers:        current_max = max(i, current_max)        yield current_maxa = [3, 4, 6, 2, 1, 9, 0, 7, 5, 8]results = list(max_generator(a))`

## 4. Don’t write it yourself. itertools got you covered

`from itertools import accumulatea = [3, 4, 6, 2, 1, 9, 0, 7, 5, 8]results = list(accumulate(a, max))`

Written by