Сообщить об ошибке.

Функция random.sample() модуля random в Python

Случайная выборка нескольких элементов последовательности без замены

Синтаксис:

import random

random.sample(population, k, *, counts=None)

Параметры:

Возвращаемое значение:

  • список длины 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 больше не поддерживаются. Множество сначала должно быть преобразован в список или кортеж, предпочтительно в детерминированном порядке, чтобы образец можно было воспроизвести.