2017-06-04 12 views
0

ここにヘルプ/ソリューションをお探しですか?Pythonリスト無作為選択

a = [1,2,3] 
b = [1,2,3] 
c = [1,2,3] 
d = [a,b,c] 

random.choice(random.choice(d)) 

これは私に与え1,2または3しかし、どのようにこのランダム関数はabcのうち、使用しているリスト変数見つけるには?このためのインデックス関数の構文は何ですか?私のプログラムでは、ランダムな選択肢が返す要素をポップする必要があります。

+0

したがって、 'random.choice()'があなたに与えたリストオブジェクトから直接ポップするだけです。変数名は必要なく、リストオブジェクトだけが必要です。 –

答えて

2

ランダムに選択したリストから何かを削除する場合は、変数名を付ける必要はありません。 リストオブジェクト自体はとなります。言い換えれば

は、ちょうど random.choice()があなたに与え、その結果から選択した番号を削除します。

picked_list = random.choice(d) 
picked = random.choice(picked_list) 
picked_list.remove(picked) 

あなたが名前のいくつかの種類を持っている必要がある場合は、入力リストの別の変数を使用しないでください。辞書を使用します。

lists = { 
    'a': [1, 2, 3], 
    'b': [1, 2, 3], 
    'c': [1, 2, 3], 
} 
list_picked = random.choice(lists) # returns 'a', 'b', or 'c' 
picked = random.choice(lists[list_picked]) 
lists[list_picked].remove(picked) 

注ちょうどあなたのリストをシャッフルする方が効率的だろうとアップフロント(ランダムな順序でそれらを置く)あなたがそれらを必要とし、要素をポップ:

d = [a, b, c] 
for sublist in d: 
    random.shuffle(sublist) 

# later on 
picked = random.choice(d).pop() # remove the last element 

が空の場合はのリストがあることを意味するものを理解する必要があります。

+0

ありがとうございました。これは絶対に私のコーディング基準を満たしています。 – Kuladip

+0

@ Kuladip:助けてくれてうれしい!あなたがそれが役に立ったと思ったら、[私の答えを受け入れる](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)を自由に感じてください。 :-) –

関連する問題