Ошибка значения: Выборка больше популяции или отрицательна (при n=5)

#python #random

Вопрос:

Я написал код, чтобы случайным образом собрать группу людей. Цель состоит в том, чтобы, когда один человек уже выбран случайным образом, программа должна удалить его. У меня есть random.sample() функция use, и она хорошо работает n=1,2,3,4 , когда я достигаю 5, она выдает мне ошибку, и до сих пор я пытаюсь понять, что происходит за этой функцией. Любое объяснение и подсказка будут полезны. Спасибо!

 import random ma_list =["anne","aline","gros","eve","armand","yves","elv","allo","sonia","luc","marc","jules","kevin"] #this will contain an occurence of our list maListOc = ma_list #this list will contain our random list random_list = None groupe = 1 #for each element in ma_list, we randome and put into our variable for i in ma_list:  random_list = random.sample(ma_list, 5)  #then we remove data already randomize in our list, but the complexity is high for this little program  for element in random_list:  ma_list.remove(element)  print("Goupe N°:",groupe)  #and we finally print our randomized list   print(random_list)  print("______________________________")  groupe  = 1 print(maListOc)  

вот результат:

 Goupe N°: 1 ['aline', 'gros', 'armand', 'sonia', 'anne'] ______________________________ Goupe N°: 2 ['kevin', 'allo', 'eve', 'elv', 'marc'] ______________________________ --------------------------------------------------------------------------- ValueError Traceback (most recent call last) lt;ipython-input-29-c2d13d61c8d1gt; in lt;modulegt;  8 #for each element in ma_list, we randome and put into our variable  9 for i in ma_list: ---gt; 10 random_list = random.sample(ma_list, 5)  11 #then we remove data already randomize in our list, but the complexity is high for this little program  12 for element in random_list:  ~anaconda3librandom.py in sample(self, population, k)  361 n = len(population)  362 if not 0 lt;= k lt;= n: --gt; 363 raise ValueError("Sample larger than population or is negative")  364 result = [None] * k  365 setsize = 21 # size of a small set minus size of an empty list  ValueError: Sample larger than population or is negative  

Комментарии:

1. Я не уверен, что здесь непонятно. Вы удаляете элементы до ma_list тех пор, пока в нем не останется менее 5 элементов. Тогда вы больше не сможете выбирать 5 случайных предметов.

2. После 2 итераций осталось всего 3 имени. Таким образом, образец не может взять 5 имен из 3 элементов списка.

3. Теперь я понимаю, поэтому мне следует просто увеличить количество предметов, если я хочу, чтобы в каждой группе было по пять человек. Спасибо

4. Когда я делал это, я просто говорил, что произойдет, если я захочу, чтобы в каждой группе было по 5 или более человек. lol

Ответ №1:

Ошибка показала, что len ma_list меньше 5. Вам нужно добавить, если… как показано ниже, чтобы разорвать цикл for.

 import random ma_list =["anne","aline","gros","eve","armand","yves","elv","allo","sonia","luc","marc","jules","kevin"] #this will contain an occurence of our list maListOc = ma_list #this list will contain our random list random_list = None groupe = 1 #for each element in ma_list, we randome and put into our variable for i in ma_list:  if(len(ma_list)lt;=5):  break  random_list = random.sample(ma_list, 5)  #then we remove data already randomize in our list, but the complexity is high for this little program  for element in random_list:  ma_list.remove(element)  print("Goupe N°:",groupe)  #and we finally print our randomized list   print(random_list)  print("______________________________")  groupe  = 1 print(maListOc)  

Выход:

 Goupe N°: 1 ['aline', 'jules', 'marc', 'yves', 'luc'] ______________________________ Goupe N°: 2 ['kevin', 'armand', 'gros', 'anne', 'sonia'] ______________________________ ['eve', 'elv', 'allo']  

Комментарии:

1. Да, вы правы, мне следовало бы обратить больше внимания на ошибку. Спасибо