我有一個看起來像這樣的對象:a - ['A', 'B', 'C']b - ['A', 'B', 'C']c - ['A', 'B', 'C', 'D']d - ['A', 'B', 'C', 'D']每個鍵都有一個由列表表示的可用選項(例如,a可以在之間進行選擇A, B, C,依此類推)。我想找到可以滿足所有人的對的組合??赡苁牵? Chosen Remaining Available Options------------------------------------------a - B - ['A', 'B', 'C'] - ['A', 'B', 'C']b - A - ['A', 'C'] - ['A', 'B', 'C']c - D - ['C', 'D'] - ['A', 'B', 'C', 'D']d - C - ['C'] - ['A', 'B', 'C', 'D']因此,在上面的示例中,a選擇了item B,減少了其余參與者的可用選項池。b然后選擇item A,依此類推。我通過基于所有參與者的可用選擇量來遍歷所有參與者來實現(xiàn)此目的,其想法是,如果我有一個參與者只想要一個項目,那么別無選擇,只能給他那個項目,將其從中刪除游泳池。import randomteam_choices = {'a': ['A', 'B', 'C'], 'b': ['A', 'B', 'C'], 'c': ['A', 'B', 'C', 'D'], 'd': ['A', 'B', 'C', 'D']}teams_already_created = []for team_b in sorted(team_choices, key=team_choices.__getitem__, reverse=False): available_opponents = [opponent for opponent in team_choices[team_b] if opponent not in teams_already_created] chosen_opponent = random.choice(available_opponents) teams_already_created.append(chosen_opponent)不過,我無法做到這一點,因為無法保證在某個時候做出的選擇會在以后阻塞其他玩家,從而使他沒有選擇余地。如果chosen_opponent為空,那么顯然這將失敗。有沒有更好的方法可以每次都起作用?
添加回答
舉報
0/150
提交
取消