【问题标题】:How can i divide list?我如何划分列表?
【发布时间】:2022-01-28 00:23:48
【问题描述】:
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))

此代码使彩票号码 所以,我想得到类似的列表

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

但我的代码只是这样显示

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

我该如何解决这个问题?

【问题讨论】:

标签: python


【解决方案1】:

您不断地追加到lotto_num 而不重置它。所以每次打印后都需要重新设置才能生成新号码。

只需将您的 lotto_num 定义移动到第一个 for 循环内:

from random import *
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()
    print("{0}".format(lotto_num))

输出:

[7, 17, 29, 32, 34, 44, 45]
[9, 16, 22, 34, 36, 41, 43]
[5, 10, 14, 22, 23, 34, 46]
[2, 11, 18, 27, 32, 35, 37]
[8, 9, 25, 26, 37, 39, 40] 
[3, 5, 8, 14, 19, 22, 33]  
[4, 5, 14, 17, 18, 30, 34]

【讨论】:

  • 对不起,我的英语不好,谢谢!
  • @pypypy 如果这解决了您的问题,我将不胜感激!
  • 当然了eeeeee
【解决方案2】:

首先,建议导入特定功能而不是整个包。因为我们只需要randint,我们可以导入:

from random import randint

您的问题可以重新表述为生成给定长度ln 列表,由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)

稍后您可以打印生成的乐透(或将它们保存到文件中),这比在生成后立即打印每个乐透更好。

...

for lotto in lotto_numbers:
    print(lotto)

可能是最干净的 Pythonic 解决方案,它使用random.sample 模拟n 次从1-46 范围内绘制随机非重复数字:

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)

【讨论】:

    【解决方案3】:
    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))
    

    【讨论】:

      猜你喜欢
      • 2021-12-01
      • 1970-01-01
      • 2020-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多