2017-03-16 18 views
0

配列内の4つのオブジェクトをランダム化してランダムに選択する場所を探しています。私はその選択されたオブジェクトの元のインデックス番号を取得する必要があります。私はこれをどのようにできるだけ短く書くべきかに関する考え方は何ですか?配列から無作為化項目を選択した後に項目インデックスを見つける方法

arrayRandomSongs = [] 
arrayChosen = [] 
trackChosen = "" 

def randomizeArray(self): 
    del self.arrayRandomSongs[:] # wipes array of all contents without making a new one 
    self.arrayRandomSongs = self.arraySongs[:] 
    random.shuffle(self.arrayRandomSongs) 

def chooseListing(self): 
    del self.arrayChosen[:] # same here 
    for i in xrange(4): 
     self.arrayChosen.append(self.arrayRandomSongs[i]) 
    del self.arrayRandomSongs[0:3] 

def chooseTrack(self): 
    self.trackChosen = random.choice(self.arrayChosen) 

あなたは私がtrackChosenオブジェクトのarayChosenインデックス番号を選択したいと思いますが、それはランダム化されていますので、私はそれを行う可能性がどのように表示されていない見ることができるように。

+0

元の元の配列ではなく、arrayChosenのインデックス番号を取得したいのですが、 –

答えて

2

ランダム化する前にインデックスを追跡する必要があります。ランダム化されたリストから要素をランダム化して選択した後、追跡リストからインデックス値にアクセスします。

リスト内の要素のインデックスを取得するには、<list>.index(<element>)を使用できます。

説明:

その要素をシャッフルする前にarrayRandomSongsのコピーを作成します。

original_arrayRandomSongs = arrayRandomSongs[:] 

random.choiceを行うことによってtrackChosenの値を取得した後、さてあなたはこの

list = [4,1,3,2] 
list_with_indices = [(num,i) for i, num in enumerate(list)] 
shuffle(list_with_indices) 

ような何かを行うことができ

original_arrayRandomSongs.index(self.trackChosen) 
+0

私はあなたの投稿をアップ投票しているのを見ています。ああ、ここで何が言われているのかよくわかりません... –

1

を行うことにより、元のリスト内のインデックスを取得し、その値を使用します基本的に元のインデックスを追跡します。

+0

シャッフル機能? –

+0

'ランダムインポートシャッフル' –

+0

ああ、知って、私は以前それをすでに使っていた –

関連する問題