'How can i divide list?

from random import *
lotto_num = []
for j in range(7) :
    for i in range(1, 8) :
        number = randint(1, 46)
        while number in lotto_num:
            number = randint(1, 46)
        lotto_num.append(number)
        lotto_num.sort()
    print("{0}".format(lotto_num))

This code makes lottery number so, I want to get lists like

[1,2,3,4,5,6,7]
[2,3,4,5,6,7,8]
[3,4,5,6,7,8,9]
...

but my code only has shown like this

[1,2,3,4,5,6,7,8,9,10.......] ## <- just add number without make new lists!

how i can fix this?



Solution 1:[1]

First of all, it is recommended to import specific functions instead of whole package. Since we need only randint we can import:

from random import randint

Than your problem can be re-worded as generating n lists of given length l, filled by random numbers from range 1-46.

from random import randint

# number of lotto
n = 5
# length of each lotto
l = 7

# result
lotto_numbers = []

# I am using _ since we do not need that value
for _ in range(n):
    lotto = []
    for _ in range(l):
        number = randint(1, 46)

        while number in lotto:
            number = randint(1, 46)
            
        lotto.append(number)
    
    lotto.sort()
    lotto_numbers.append(lotto)

print(lotto_numbers)

Later you can print generated lotto (or save them into file), that is better approach than printing each lotto right after generation.

...

for lotto in lotto_numbers:
    print(lotto)

Probably the cleanest Pythonic solution which uses random.sample to simulate n times drawing random non-repeated numbers from range 1-46 follows:

from random import sample

# number of lotto
n = 5
# length of each lotto
l = 7

lotto_numbers = [sorted(sample(range(1, 46), l)) for _ in range(n)]

print(lotto_numbers)

Solution 2:[2]

from random import *
array=[]
for j in range(7) :
    lotto_num = []
    for i in range(1, 8) :
        number = randint(1, 46)
        while number in lotto_num:
            number = randint(1, 46)
        lotto_num.append(number)
        lotto_num.sort()
    array.append(lotto_num)
    print("{0}".format(lotto_num))

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1
Solution 2 Mustafa Fatih ?en