import random random.sample(population, k, *, counts=None)
population
- последовательность или множество,k
- количество выбираемых элементов,counts=None
- список элементов для повтора (Добавлен в Python 3.9).k
случайных элементов из population
.Функция sample()
модуля random
возвращает список длины k
случайных элементов, выбранных из последовательности или множества population
. Исходная последовательность population
остается неизменной.
Используется для случайной выборки без замены.
Элементы population
не должны быть хешируемыми или уникальными. Если population
содержит повторы, то каждый случай является возможным выбором в результирующем списке.
>>> import random >>> s = 'абракадабра' >>> random.sample(s, 5) # ['к', 'б', 'б', 'а', 'р']
Повторяющиеся элементы можно указать по одному или с помощью необязательного ключевого аргумента counts
(Добавлен в Python 3.9). Например:
random.sample(['red', 'blue'], counts=[4, 2], k=5) # эквивалентно random.sample(['red', 'red', 'red', 'red', 'blue', 'blue'], k=5).
Количество возвращаемых элементов в выборке не должно превышать размер самой выборки, т.е. k <= len(population)
, в противном случае появляется исключение ValueError
.
Чтобы выбрать образец из диапазона целых чисел, используйте объект range() в качестве аргумента. Это особенно быстро и эффективно для отбора элементов из больших population
, например: random.sample(range(10000000), k = 60)
.
В качестве population
могут быть любые итерируемые объекты:
# выбор из диапазона целых чисел >>> random.sample(range(10000000), 5) # [312288, 4733164, 9173113, 8937636, 8361736] # выбор из генератора >>> random.sample([i**2 for i in range(33)], 10) # [529, 784, 324, 256, 361, 676, 289, 900, 36, 841]
В принципе, параметры population
и k
могут быть довольно большими, но необходимо принимать во внимание, что при создании выборок необходимо запоминать либо индексы выбранных элементов, либо индексы тех элементов, которые могут быть выбраны. Так что при очень больших значениях k
и длины population
функция может работать довольно медленно и потреблять много памяти.
Изменено в Python 3.9: Добавлен аргумент counts
.
Не рекомендуется с версии Python 3.9: В будущем population
должна быть последовательностью. Экземпляры множества set
больше не поддерживаются. Множество сначала должно быть преобразован в список или кортеж, предпочтительно в детерминированном порядке, чтобы образец можно было воспроизвести.