Python 如何创建一个随机唯一数列表,以避免使用已经存在的随机唯一数列表中的数字?
我正在尝试制作一台彩票机,它能从1-34生成7个中奖号码和3个奖金号码的列表。我希望奖金号码永远不要选择与中奖号码相同的号码Python 如何创建一个随机唯一数列表,以避免使用已经存在的随机唯一数列表中的数字?,python,Python,我正在尝试制作一台彩票机,它能从1-34生成7个中奖号码和3个奖金号码的列表。我希望奖金号码永远不要选择与中奖号码相同的号码 winning_numbers = random.sample(range(1, 34), 7) bonus_numbers = random.sample(range(1, 34), 3) 是否有任何命令/代码可以排除上一个列表中已选择的数字?random解决方案 如果只想使用随机模块,可以使用: import random nums = random.sample
winning_numbers = random.sample(range(1, 34), 7)
bonus_numbers = random.sample(range(1, 34), 3)
是否有任何命令/代码可以排除上一个列表中已选择的数字?
random
解决方案
如果只想使用随机
模块,可以使用:
import random
nums = random.sample(range(1,35), 10)
winning_numbers = nums[:7]
bonus_numbers = nums[7:]
>>> winning_numbers
[2, 23, 29, 34, 26, 16, 13]
>>> bonus_numbers
[8, 4, 19]
Asrandom.sample
是“用于随机抽样,无需更换。”(引自)
numpy
解决方案
您还可以使用numpy
,因为numpy.random.choice
有一个replace
参数,可以设置为false
。(我个人很喜欢使用numpy
随机数,因为它比random
在更复杂的任务中提供了更大的灵活性。)
随机
解决方案
如果只想使用随机
模块,可以使用:
import random
nums = random.sample(range(1,35), 10)
winning_numbers = nums[:7]
bonus_numbers = nums[7:]
>>> winning_numbers
[2, 23, 29, 34, 26, 16, 13]
>>> bonus_numbers
[8, 4, 19]
Asrandom.sample
是“用于随机抽样,无需更换。”(引自)
numpy
解决方案
您还可以使用numpy
,因为numpy.random.choice
有一个replace
参数,可以设置为false
。(我个人很喜欢使用numpy
随机数,因为它比random
在更复杂的任务中提供了更大的灵活性。)
开头的一句小但不重要的话: 无论您是先抽取前7个数字,然后从剩余的数字中抽取3个,还是立即抽取10个并将其拆分为7个中奖数字和3个奖金数字,在概率上都是绝对相等的: 在第一种情况下,任何数字成为奖金数字的概率为: 在第二种情况下: 请注意,任何数字成为中奖数字的概率的推理是相同的 实现第一种情况实际上稍微长一点,但在使用
set
和时仍然相当简单。
下面是它的外观:
import random
# set of all potential numbers to draw from
all_numbers = set(range(1,35))
# draw the winners
winning_numbers = set(random.sample(all_numbers, 7)
# subtract the winners
remaining_numbers = all_numbers-winning_numbers
# draw the bonus from the remaining numbers:
bonus_numbers = set(random.sample(remaining_numbers, 3))
第二种情况的实现是最小的,可能如下所示:
import random
drawn_numbers = random.sample(range(1,35), 10)
winning_numbers, bonus_numbers = drawn_numbers[:7], drawn_numbers[7:]
希望对大家有帮助,编码快乐 开头的一句很小但并非不重要的话: 无论您是先抽取前7个数字,然后从剩余的数字中抽取3个,还是立即抽取10个并将其拆分为7个中奖数字和3个奖金数字,在概率上都是绝对相等的: 在第一种情况下,任何数字成为奖金数字的概率为: 在第二种情况下: 请注意,任何数字成为中奖数字的概率的推理是相同的 实现第一种情况实际上稍微长一点,但在使用
set
和时仍然相当简单。
下面是它的外观:
import random
# set of all potential numbers to draw from
all_numbers = set(range(1,35))
# draw the winners
winning_numbers = set(random.sample(all_numbers, 7)
# subtract the winners
remaining_numbers = all_numbers-winning_numbers
# draw the bonus from the remaining numbers:
bonus_numbers = set(random.sample(remaining_numbers, 3))
第二种情况的实现是最小的,可能如下所示:
import random
drawn_numbers = random.sample(range(1,35), 10)
winning_numbers, bonus_numbers = drawn_numbers[:7], drawn_numbers[7:]
希望对大家有帮助,编码快乐 像这样的
import random
winning_numbers = random.sample(range(1, 34), 7)
bonus_numbers = []
while 1==1:
num = random.randint(1,34)
if len(bonus_numbers) == 3:
break
if num not in winning_numbers and num not in bonus_numbers:
bonus_numbers.append(num)
像这样的
import random
winning_numbers = random.sample(range(1, 34), 7)
bonus_numbers = []
while 1==1:
num = random.randint(1,34)
if len(bonus_numbers) == 3:
break
if num not in winning_numbers and num not in bonus_numbers:
bonus_numbers.append(num)
是的,有:)如果您一直绘制数字直到没有匹配项,会怎么样?检查此答案的可能重复项:注意,如果您想包括34之前的所有数字,您应该使用
范围(1,35)
。是的,有:)如果您一直绘制数字直到没有匹配项,会怎么样?检查此答案的可能重复项:注意,如果您想包括34之前的所有数字,您应该使用范围(1,35)
。