num1 = range(1,6) # standard range num2 = [i for i in range(1,6)] # list - unnecessary but works num3 = (i for i in range(1,6)) # generator expression (!) good1 = [[i*j for i in num1] for j in num1] # compute multiplication table good2 = [[i*j for i in num2] for j in num1] # dto, with inner list bad = [[i*j for i in num3] for j in num1] # dto, with inner generator print("good1 =",good1) # good multiplication table print("good2 =",good2) # good multiplication table print(" bad =",bad, "-> only first row is o.k.") print('---') print()