從n個物件中隨機選擇乙個

2021-06-18 14:05:35 字數 726 閱讀 3669

現在有n個物件,讓從裡隨機選擇乙個是非常簡單的。最直接的方法是產生乙個1~n的隨機數就可以了。但是現在如果我告訴你,n是不確定的,又該怎麼做?

現在問題變為:

如何從事先不知道文字檔案行數的情況下讀取該檔案,從中隨機選擇一行並輸出?

這個題目看上去比原來的問題有意思的多。答案也十分有趣:

i = 0

while more input lines

with probability 1.0 / ++i

choice = this input line

print choice

摘自《程式設計珠璣》第二版

第一行被選中的概率為1,第二行被選中的概率為1/ 2, ..., 第k行被選中的概率為1 / k ,

但是第1行保持被選中,不被後面的行覆蓋的概率就是最終的概率: 1 * 1 / 2 * 2 / 3 * 3 / 4 * ... * (n - 1) / n = 1 / n

第2行保持被選中,不被後面的行覆蓋的概率就是最終的概率:1 / 2 * 2 / 3 * 3 / 4 * ... * (n - 1) / n = 1 / n

第3行保持被選中,不被後面的行覆蓋的概率就是最終的概率: 1 / 3 * 3 / 4 * 4 / 5 * ... * (n - 1) / n = 1 / n

第n行保持被選中,不被後面的行覆蓋(後面沒有文字了)的概率就是最終的概率:1 / n

按照上面的策略,每行被最終選中輸出的概率為 1 / n

如何從字典中隨機選擇乙個鍵

我是python的初學者。我嘗試使用這種方法 random.choice my dict.keys 但是有乙個錯誤 dict keys object does not support indexing我的字典很簡單,就像 my dict 你是如何解決這個問題的?非常感謝!要從名為的字典中選擇隨機金鑰...

Python 從集合中隨機取出乙個元素

部落格說明 說明有時候有乙個這樣的需求,需要在乙個資料表裡面隨機獲取到一條資料,這就需要我們借助python的模組random了 思路首先是使用flask的資料庫模組sqlalchemy查詢資料庫,然後取隨機的數 from random import choice model user all us...

從乙個檔案中隨機抽取N行方法

從m行的檔案隨機抽取n行 可以假定m n 這是需要對資料進行抽樣處理時很長常見的需求。首先想到的方法是每讀取一行,扔乙個0到m 1的隨機數,如果隨機數小於n,則輸出該行,否則不輸出。perl源 如下 usr bin perl subset.pl usage sub set.pl file sampl...