Generator Expressions

To initialize tuples, arrays and other types of sequences, you could also start from a listcomp, but a genexp (generator expression) saves memory because it yields items one by one using the iterator protocol instead of building a whole list just to feed another constructor.

Python
colors = ['black', 'white']
sizes = ['S', 'M', 'L']

for tshirt in (f'{c} {s}' for c in colors for s in sizes):
    print(tshirt)

black S
black M
black L
white S
python
y = [1,4,5,4,2,]
# each iteration yields x, so once we use each x they don't stay in memory
result = sum(x for x in y if x % 2 == 0)