簡體   English   中英

生成 5 個非重復整數的列表

[英]Generate list of 5 non-repeating integers

我是 Python 新手,我正在嘗試生成一個包含 4 個隨機數的列表,其中的整數介於 1 和 9 之間。該列表不得包含重復的整數。

我遇到的問題是該程序不會每次都輸出恰好 4 個數字。 有時它會生成 3 個或 2 個數字,我不知道如何解決它。

我的代碼:

import random
lst = []
for i in range(5):
     r = random.randint(1,9)
     if r not in lst: lst.append(r)
print(lst)

有沒有辦法在沒有 random.sample 的情況下做到這一點? 此代碼是學校更大作業的一部分,我的老師不希望我們使用 random.sample 或 random.shuffle 函數。

您的代碼生成 5 個隨機數,但它們不一定是唯一的。 如果生成了2並且list已經有2 ,則不要附加它,而實際上應該生成一個尚未使用的替代數字。

您可以使用while循環來測試您是否已經有足夠的數字:

result = []  # best not to use list as a variable name!
while len(result) < 5:
    digit = random.randint(1, 9)
    if digit not in result:
        result.append(digit)

但這比真正需要的工作要多,而且理論上可能需要永遠(因為相同的 4 個初始數字的數百萬次重復仍然被認為是隨機的)。 標准庫有一個更好的方法來完成這個任務。

相反,您可以使用random.sample()range()對象中獲取 5 個唯一數字:

result = random.sample(range(1, 10), 5)

這保證從范圍中產生 5 個值,沒有重復的數字,它分 5 個步驟。

使用random.sample

import random
random.sample(range(1, 10), 4)

這會生成一個包含19之間的四個隨機值的列表,沒有重復。

您的問題是,您要迭代 5 次,隨機范圍為 1-9。 這意味着您有大約 50/50 的機會獲得重復整數,您的條件會阻止將其附加到您的列表中。

這將更好地為您服務:

def newRunLst():
     lst = []
     while len(lst) < 4:
          r = random.randint(1,9)
          if r not in lst: lst.append(r)
     print lst

如果需要的隨機列表不是太小(與總列表相比),則可以

  1. 生成隨機數的索引 DataFrame
  2. 排序並
  3. 從頂部選擇......喜歡
(pd.DataFrame([(i,np.random.rand()) for i in range(10)]).sort_values(by=1))[0][:5].sort_index()

暫無
暫無

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

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