Search code examples
python-3.xlistrandommultiplication

Building a list of random multiplication examples


I have two 100-element lists filled with random numbers between 1 and 10.

I want to make a list of multiplications of randomly selected numbers that proceeds until a product greater than 50 is generated.

How can I obtain such a list where each element is a product and its two factors?

Here is the code I tried. I think it has a lot of problems.

import random
list1 = []
for i in range(0,1000):
    x = random.randint(1,10)
    list1.append(x)

list2 = []
for i in range(0,1000):
    y = random.randint(1,10)
    list2.append(y)

m=random.sample(list1,1)
n=random.sample(list2,1)

list3=[]
while list3[-1][-1]<50:
    c=[m*n]
    list3.append(m)
    list3.append(n)
    list3.append(c)
print(list3)

The output I want

[[5.12154, 4.94359, 25.3188], [1.96322, 3.46708, 6.80663], [9.40574, 2.28941, 21.5336], [4.61705, 9.40964, 43.4448], [9.84915, 3.0071, 29.6174], [8.44413, 9.50134, 80.2305]]

To be more descriptive:

[[randomfactor, randomfactor, product],......,[[randomfactor, randomfactor, greater than 50]]


Solution

  • Prepping two lists with 1000 numbers each with numbers from 1 to 10 in them is wasted memory. If that is just a simplification and you want to draw from lists you got otherwise, simply replace

    a,b = random.choices(range(1,11),k=2)
    

    by

    a,b = random.choice(list1), random.choice(list2)
    

    import random
    
    result = []
    while True:
        a,b = random.choices(range(1,11),k=2)  # replace this one as described above
        c = a*b
        result.append( [a,b,c] )
        if c > 50:
            break
    
    print(result)
    

    Output:

    [[9, 3, 27], [3, 5, 15], [8, 5, 40], [5, 9, 45], [9, 3, 27], [8, 5, 40], [8, 8, 64]]
    

    If you need 1000 random ints between 1 and 10, do:

    random_nums = random.choices(range(1,11),k=1000)
    

    this if much faster then looping and appending single integers 1000 times.


    Doku: