从列表中选择随机值,直到它们在Python中消失
使用Python,我想从列表中随机选择一些人,并将他们分成5人一组,而不必多次选择同一个人。人的定义有两个标准:年龄和性别。人员列表如下所示: PPL=[1,4,6],[2,5,5],[3,7,3],[4,2,8],[5,4,6] 其中,每个列表中的3个数字代表:1-5岁、男性、女性。 我意识到5的分组并不重要,因为我所要做的就是随机列出一个列表,然后我可以一次数到5,但我不知道如何在不重复使用人员的情况下随机列出一个列表。有什么建议吗? 我从以下内容开始,它实际上只是打印剩余的雄性和雌性:从列表中选择随机值,直到它们在Python中消失,python,arrays,list,random,population,Python,Arrays,List,Random,Population,使用Python,我想从列表中随机选择一些人,并将他们分成5人一组,而不必多次选择同一个人。人的定义有两个标准:年龄和性别。人员列表如下所示: PPL=[1,4,6],[2,5,5],[3,7,3],[4,2,8],[5,4,6] 其中,每个列表中的3个数字代表:1-5岁、男性、女性。 我意识到5的分组并不重要,因为我所要做的就是随机列出一个列表,然后我可以一次数到5,但我不知道如何在不重复使用人员的情况下随机列出一个列表。有什么建议吗? 我从以下内容开始,它实际上只是打印剩余的雄性和雌性: i
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
扩展Joel Cornett的评论和A.Rodas示例: 这就是你想要的吗:
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']
我不理解这个问题。你不能只在PPL上使用random.shuffle然后在列表中迭代?那是随机的,没错。我同意@JoelCornett的说法,你每次都可以弹出,只是为了确保不会再次获得相同的元素。我对随机人列表应该包含的内容感到困惑;