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 Spython
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)