Для работы со случайными значениями в 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))
...
Подписывайтесь на наш Telegram канал
Теги: #python