Используем модуль Python random получая случайные значения с sample() и choice()


08 июня 2021


Получение случайных значений в Python из списков и словарей

Для работы со случайными значениями в Python используется модуль random. Кроме получения числовых значений, используя этот модуль, мы можем получить как одно случайное значение из списка так и группу. Рассмотрим как можно реализовать эту задачу на примере нескольких методов, а так же sample() и choice().

 

Получение одного случайного значения

По индексу с randint()

randint(a, b) возвращает случайное число между 'a' и 'b' включительно. Мы можем это использовать в списках подставив 0, как указатель начала списка, и len(list) - 1, как указатель его конца:

from random import randint

l = ['один', 'два', 'три']
r = l[randint(0, len(l)-1)]

В случае со словарями вариантов больше. Например мы можем использовать метод 'items()' возвращающий список кортежей:

from random import randint

d = {1: 'один', 2: 'два', 3: 'три'}
data = list(d.items())
key,val = data[randint(0, len(d)-1)]

По индексу с randrange()

randrange(a) - возвращает случайное число, которое больше или равно 0, но меньше чем 'a' (0 <= n < a). Из-за того что отсчет начинается с 0 нам нужно указывать только одно число. Пример получения случайного результата из списка:

from random import randrange

lst = ['один', 'два', 'три']
r = lst[randrange(len(lst))]

Пример получения такого результата из словаря:

from random import randrange

dct = {'1': 'один', '2': 'два', '3': 'три'}
data = list(dct.keys())
# data хранит ['1', '2', '3']
key = data[randrange(len(data))]

Из списка с choice()

choice() - основной способ получения случайного значения из списка. В его случае мы не должны думать о его длине и индексах:

from random import choice

lst = choice(['один', 'два', 'три'])

Пример со словарем:

from random import randrange

dct = {'1': 'один', '2': 'два', '3': 'три'}
data = choice(list(dct.items()))

 

 

Получение нескольких случайных значений

sample()

Метод sample(x, y) использует 'x' как массив и 'y' как число значений, которые вам необходимо вернуть. Возвращаемая группа не будет содержать дубликатов. Пример получения группы случайных значений со списком:

from random import sample

lst = ['один', 'два', 'три']
r = sample(lst, 2)

Словарь:

from random import sample

dct = {'1': 'один', '2': 'два', '3': 'три'}
data = list(dct.items())
r = sample(data, 2)

Перемешиваем словарь случайным образом

Используя этот метод вы так же можете перемешать список указав всю его длину:

from random import sample

l = ['один', 'два', 'три']
r = sample(lst, len(l))

choices()

Так же группу значений можно вернуть с choices(list, k=count). Отличие этого метода от предыдущего в том, что он может взять один и тот же элемент из списка (т.е. не следит за дубликатами). 

Пример со списком:

from random import choices

lst = ['один', 'два', 'три']
r = choices(lst, k=2)

Со словарем:

from random import choices

dct = {'1': 'один', '2': 'два', '3': 'три'}
data = list(dct.items())
r = choices(data, k=2)

Еще один пример разницы samle и choices:

from random import choices, sample

lst = [1,2,3,4,5]
print('Одно значение повторяется несколько раз: ', choices(lst, k=3))
print('Только уникальные: ', sample(lst, 3))

 

...

Теги: #python


Каналы
Telegram FixMyPc Telegram Лента FixMyPC RSS Rss
Популярные тэги
О блоге
Этот блог представляет собой конспекты выученного материала, приобретённого опыта и лучшие практики в системном администрировании и программировании.