2013-10-09 28 views
1

我想知道是否有人能夠幫助我解決python編程問題。我有5號(0,2,30,180,356)和要選擇隨機Python - 如何在滿足不同條件時從變量中選擇

delayVariable=[0,2,30,180,365] 
delayCondition = random.choice(delayVariable) 
每次我想在隨機直到另一條件被滿足,選擇數

一個條件。例如,當「365」已被選擇20次時,我不再希望它選擇該條件,而是應該從[0,2,30,180]生成隨機數,並且如果已經選擇了20次,則再次選擇「30」也希望將其排除,因此應該從[0,2,180]生成隨機數。我希望這樣繼續下去,直到沒有剩下數字。

預先感謝您


感謝您的答案正是我需要的。更復雜的問題是何時滿足另一個條件,這可能發生在該數字被選定20次之前。然而,我仍然希望停止選擇該號碼。例如:

如果條件1 =「OFF」,那麼我不再需要「0」被選擇,如果條件2 =「關」,那麼我不再需要「2」被選擇等....

+2

有多少數字?如果它只有100個,只需創建一個包含20x0,20x2等的列表,將其拖動,並從該列表中彈出元素。 –

回答

4

使用計數器。

import collections 
import random 

delays=[0,2,30,180,365] 

counter = collections.defaultdict(int) 
while delays: 
    condition = random.choice(delays) 
    print(condition) 
    counter[condition] += 1 
    if counter[condition] == 20: 
     delays.remove(condition) 

程序計算選擇列表中每個元素的頻率。當達到閾值(這裏是20)時元素被移除。

如果要在達到閾值之前根據條件從列表中刪除元素,您有兩個選項。首先,您可以將此條件的計數器值設置爲閾值。該元素將被代碼中的remove刪除。第二個 - 在我看來更好的方法 - 就是從列表中刪除元素。如果元素不再存在,則不能選擇。問題解決了。

+0

謝謝你的答案正是我需要的。更復雜的問題是何時滿足另一個條件,這可能發生在該數字被選定20次之前。然而,我仍然希望停止選擇該號碼。例如: 如果條件1 =「關」,那麼我不再需要選擇「0」,如果條件2 =「關」,那麼我不再需要選擇「2」等等...... – AB567

+0

非常感謝你的幫助,但我似乎無法得到這個工作。由於此代碼處於更大的循環中,因此我希望代碼記住哪些已被刪除,並只提供一個數字。我只能得到這個代碼作爲一個單獨的作品輸出所有數字。就像你在編輯中建議的那樣,我只是想在條件成立時永久刪除該變量,但允許腳本的其餘部分繼續運行 – AB567

+0

你必須知道什麼時候會發生什麼。初始化用數據初始化列表的計數器。其他一切都發生在循環中。 – Matthias

2

使用他們作爲字典

delayVariable={0:50,2:50,30:50,180:50,365:50} 

因此出現了選擇以後每次可以減少值,直到它的0,使用if來檢查它是否是0,那麼從字典彈出它。

如果您希望您可以使用if語句,但對於每個延遲將會是if!所以這不是一個明確的方法,但它會起作用。

+0

靈活方法的好主意。 – Matthias

4

你的問題相當於從數組中挑選不同的元素[二十個「365」,二十個「30」,...]。我們可以使用random.sample從數組中獲得不同的元素。

>>> random.sample([0,2,30,180,365] * 20, 80) 
[0, 2, 180, 180, 2, 0, 180, 30, 365, 365, 30, 30, 30, 365, 30, 0, 365, 365, 2, 0, 
30, 2, 365, 30, 180, 180, 180, 0, 30, 180, 365, 180, 0, 2, 365, 0, 0, 30, 180, 30, 30, 
2, 365, 2, 180, 30, 0, 2, 2, 0, 0, 30, 30, 0, 180, 2, 2, 365, 180, 365, 2, 2, 2, 365, 
30, 30, 0, 0, 180, 30, 30, 30, 0, 365, 365, 0, 365, 30, 2, 180] 
>>> collections.Counter(_) # check that we have no more than twenty "30"s, etc. 
Counter({30: 20, 0: 16, 2: 15, 365: 15, 180: 14}) 
相關問題