2013-04-07 110 views
0

使用Python,我想從列表中隨機選擇一個人,並將它們分成5個組,而不會多次選擇同一個人。人們被定義爲2個標準:年齡和性別。人名單如下:從列表中選擇隨機值,直到它們在Python中消失

PPL = [1,4,6],[2,5,5],[3,7,3],[4,2,8],[5,4 ,6]

其中每個列表中的3個數字代表:年齡類別(1-5),男性數量,女性數量。 我意識到5的分組並不是真的很重要,因爲我所要做的只是創建一個隨機列表(然後我可以一次數數5),但是我不確定如何創建一個沒有列表的隨機列表重複使用人。有什麼建議麼?
我已經開始用下面的(這真的只是打印剩餘的男性和女性):

import random 

PPL = [1, 4, 6], [2, 5, 5], [3, 7, 3], [4, 2, 8], [5, 4, 6] 

age = range(0, 6) 
gender = [1, 2]#1 = male, #2 = female 

randomAge = random.choice(age) 
randomGender = random.choice(gender) 

count = 0 
PPLcounter = 0 
for P in PPL: 
     while P[randomGender] > 0: 
      PPL[PPLcounter][randomGender] = P[randomGender] - 1 
      MRemaining = PPL [PPLcounter][1] 
      FRemaining = PPL [PPLcounter][2] 
      count = count+1 
      print count, MRemaining, FRemaining 
     PPLcounter += 1 
+5

我不理解問題。你不能在'PPL'上使用'random.shuffle',然後遍歷列表?那將是隨機的。 – 2013-04-07 02:42:10

+2

正確。我同意@JoelCornett你可以彈出每次只是爲了確保不再獲得相同的元素 – karthikr 2013-04-07 02:43:42

+0

我很困惑,隨機人員列表應該包含什麼。 – ecline6 2013-04-07 02:59:28

回答

0

擴大喬爾科內特的評論和A.羅達斯例如:

這是你想要的東西:

import random 

def gen_people_in_group(age, num_male, num_female): 
    males = ['m%s' % age] * num_male 
    females = ['f%s' % age] * num_female 
    return males + females 

def gen_random_sample(num_in_group=5): 
    groups = [1, 4, 6], [2, 5, 5], [3, 7, 3], [4, 2, 8], [5, 4, 6] 

    population = [] 
    for group in groups: 
     population += gen_people_in_group(*group) 

    random.shuffle(population) 

    for idx in xrange(0, len(population), num_in_group): 
     yield population[idx:(idx + num_in_group)] 

def main(): 
    for rand_group in gen_random_sample(): 
     print rand_group 

if __name__ == '__main__': 
    main() 

這裏有一個輸出:

['m3', 'f3', 'm5', 'f4', 'm1'] 
['f4', 'f4', 'm4', 'f2', 'm2'] 
['m4', 'f3', 'm5', 'm3', 'f5'] 
['m3', 'f5', 'f1', 'm3', 'f4'] 
['m5', 'f2', 'f1', 'f1', 'f5'] 
['m1', 'f2', 'f2', 'f1', 'm2'] 
['f5', 'f4', 'f4', 'm2', 'f4'] 
['m3', 'm2', 'f2', 'f1', 'f5'] 
['m3', 'm5', 'm2', 'f5', 'f1'] 
['m1', 'm3', 'f3', 'm1', 'f4'] 
+1

'random'也有一個有用的'sample()'方法;) – 2013-04-07 03:49:41