2015-11-13 72 views
1
class Agent: 
    def __init__(self, state): 
     self.state = state 
#initialize values 
state_0_agents = 10 
state_1_agents = 10 
numberofselections = 2 #number of agents who can choose to transition to the higher plane 

#list of agents 
agents = [Agent(0) for i in range(state_0_agents)] 
agents.extend(Agent(1) for i in range(state_1_agents)) 

random.choice(agents) 

嘿! 所以我想從這個代理列表中隨機選擇一些代理,這些代理的狀態我最終將改變1.不幸的是,隨機選擇功能在所有元素中進行選擇。不過,我想隨機選擇只有那些狀態爲0的人。在條件屬性列表中選擇隨機元素

我寧願如果這可能發生,而不創建一個新的列表。

+1

我覺得你的選擇是做一個新的列表,然後從該選擇,或重複隨機選擇,直到您選擇具有狀態== 0之一。 –

+0

您必須創建一個新列表,或者繼續重試'random.choice()'調用,直到它返回一個'.state'設置爲'0'。 –

+0

如果我繼續重試隨機選擇,那麼對於一堆時期它可能什麼都不會發生。 – Dio

回答

1

我看到三個選項,在這裏:

  • 創建一個列表,無論如何,你可以用一個列表理解這樣做的:

    random.choice([a for a in agents if a.state == 0]) 
    
  • random.choice()調用一個循環中,不斷嘗試,直到你得到一個匹配的標準:

    while True: 
        agent = random.choice(agents) 
        if agent.state == 0: 
         break 
    
  • Index your agents列表,然後從該索引中選擇;這些都是真的只是列出還是:

    agent_states_index = {} 
    for index, agent in enumerate(agents): 
        agent_states_index.setdefault(agent.state, []).append(index) 
    
    agent_index = random.choice(agent_states_index[0]) 
    agent = agents[agent_index] 
    
+0

太棒了!謝謝!這個虛假列表讓我頭疼,但它起作用! – Dio