1. Use list comprehensions

Avoid looping over elements just to store derived results. Use a list comprehension or generator expression instead. A list comprehension eagerly evaluates and returns a list, while a generator expression evaluates lazily.

Choosing between the two then becomes a question of ownership: do you need the whole materialized result now, or do you want to stream values into another consumer? That distinction is clearer when the code uses the dedicated comprehension forms.

1.1. Don’t do this

1results = []
2
3for i in range(10):
4    s = i ** 2
5    results.append(s)
6
7total = sum(results)

1.2. Do this

1total = sum([i ** 2 for i in range(10)])
1total = sum((i ** 2 for i in range(10)))