从数组中选择随机项后如何查找项索引

时间:2017-03-16 18:01:43

标签: python arrays python-2.7 random

尝试将某些内容用于我在数组中随机选择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索引号,但由于它是随机的,我不知道如何做到这一点。

2 个答案:

答案 0 :(得分:2)

您必须在随机化之前跟踪索引。然后在随机化并从随机列表中选择一个元素后,从跟踪列表中访问索引值。

要获取列表中元素的索引,您可以执行<list>.index(<element>)

<强>解释

在对其元素进行混洗之前创建arrayRandomSongs的副本。

original_arrayRandomSongs = arrayRandomSongs[:]

通过执行trackChosen获取random.choice的值后,使用该值通过执行

获取原始列表中的索引
original_arrayRandomSongs.index(self.trackChosen)

答案 1 :(得分:1)

你可以做这样的事情

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

基本上你跟踪原始索引。