2017-03-16 80 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值後,使用這個值做

original_arrayRandomSongs.index(self.trackChosen) 
+0

我看到人upvoting你的帖子,唉我不明白這裏說的是什麼...... –

1

以獲得其在原列表索引那麼你可以做這樣的事情

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

基本上你可以跟蹤原始索引。

+0

你怎麼得到shuffle函數? –

+0

'從隨機進口洗牌' –

+0

哦權利,appologies,我以前已經使用它 –

相關問題