簡體   English   中英

如何制作一個隨機唯一數字列表,避免使用已經存在的隨機唯一數字列表中的數字?

[英]How do i make a list of random unique numbers that avoid using numbers from an already existing list of random unique numbers?

我正在嘗試制作一種彩票機,該彩票機從1-34生成7個中獎號碼和3個獎金號碼的列表。 我希望獎金號碼永遠不要選擇與中獎號碼相同的號碼。

winning_numbers = random.sample(range(1, 34), 7)
bonus_numbers = random.sample(range(1, 34), 3)

是否有任何命令/代碼可以排除上一個列表中已經選擇的數字?

random

如果只想使用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]

由於random.sample是“用於無替換的隨機抽樣”。 (摘自文檔

numpy解決方案

您還可以使用numpy ,因為numpy.random.choice有一個replace參數,您可以將其設置為false (我個人是粉絲,或者使用numpy表示隨機數,因為它在執行更復雜的任務時比使用random提供更大的靈活性)

import numpy as np

nums = np.random.choice(range(1,35), 10, replace=False)

winning_numbers = nums[:7]
bonus_numbers = nums[7:]


>>> winning_numbers
array([27,  4, 17, 30, 32, 21, 23])

>>> bonus_numbers
array([15, 13, 18])

在開始時有一個簡短但不重要的說明:

無論您是先抽出7個數字,然后從其余數字中抽出3個,還是立即抽出10個並將其分為7個中獎數字和3個獎勵數字,就概率而言,絕對相等

在第一種情況下,任何數字成為獎勵數字的可能性為:

首先7然后3

在第二個中:

all10then3

注意,任何數字作為中獎號碼的可能性的理由都是相同的。

實際上, 實現第一種情況的時間略長,但是在使用setset操作時仍然相當簡單。 這是下面的樣子:

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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM