現在有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...