2011-04-08 57 views
2

我有一個包含大約40個字符串的列表,並且希望爲每個項目分配一個權重/百分比。在運行期間,我現在想要一個隨機數發生器根據它的百分比從列表中選擇一個項目。這意味着在足夠大的樣本量下,該物品被採摘的次數將對應於指定的百分比。我面臨的一個問題是,將來我可能想擴大名單,然後必須爲其他項目分配新的百分比。保存這個列表併爲每個項目分配權重的最佳方法是什麼?以百分比形式從列表中選擇項目

我可以想出一些方法來實現這一點,但他們都很快&髒,所以我希望有人有一個設計模式。我在Python中工作,但是因爲這是概念性的,我並不是真的在捕獲顯式的例子。

非常感謝您的幫助。

+0

每個項目的百分比是否取決於列表的其餘部分?這並不完全清楚你想要做什麼。也許你的想法之一會更明確地澄清它? – jmccarthy 2011-04-08 17:23:53

+1

你需要一個'純粹的'python解決方案,還是可以基於,例如'scipy'和/或'numpy'(見http://scipy.org/)?謝謝 – eat 2011-04-08 17:24:05

+0

是的,每個項目的百分比將取決於列表的其餘部分。理想情況下,我會添加一個帶有「權重」的新項目,並且我分配給此項目的權重將從列表中的所有其他項目中均等地扣除。但我想這將是一個先進的解決方案。 – 2011-04-08 17:30:04

回答

1

一種方式做到這一點是使用範圍作爲字典鍵(或許爲2 -tuple)和字符串作爲值。然後,您可以使用random.randint()在所有字典鍵值所描述的範圍內生成一個整數。添加一個新的字符串很容易,它的範圍推到別人的範圍旁邊(收縮它們的重量)。如果你不希望發生這種情況,那麼你必須重新調整一切。

{ 
    (0,10): "First string", 
    (11,50): "Second string", 
    (51,73): "Third string" 
} 
+0

謝謝nmichaels,這是我最初想到的解決方案。也許這是最好的方法。 – 2011-04-08 17:32:26