Автор оригинала: Guest Contributor.
Вступление
Выбор случайного элемента или значения из списка является обычной задачей – будь то рандомизированный результат из списка рекомендаций или просто случайное приглашение.
В этой статье мы рассмотрим как случайным образом выбирать элементы из списка в Python . Мы рассмотрим извлечение как единичных случайных элементов, так и извлечение нескольких элементов – с повторением и без повторения.
Выбор Случайного Элемента Из Списка Python
Наиболее интуитивным и естественным подходом к решению этой задачи является генерация случайного числа, которое действует как индекс для доступа к элементу из списка.
Чтобы реализовать этот подход, давайте рассмотрим некоторые методы генерации случайных чисел в Python: random.randint()
и random.randrange()
. Мы можем дополнительно использовать random.choice()
и предоставить итерацию, которая приводит к тому, что случайный элемент из этой итерации возвращается обратно.
Использование random.randint()
random.randint(a, b)
возвращает случайное целое число между a
и b
включительно.
Нам понадобится случайный индекс в диапазоне 0
to len(list)-1
, чтобы получить случайный индекс элемента в списке:
import random letters = ['a', 'b', 'c', 'd', 'e', 'f'] random_index = random.randint(0,len(letters)-1) print(letters[random_index])
Запуск этого кода несколько раз дает нам:
e c f a
Использование random.randrange()
random.randrange(a)
– это еще один метод, который возвращает случайное число n
такое, что 0 < a
:
import random letters = ['a', 'b', 'c', 'd', 'e', 'f'] random_index = random.randrange(len(letters)) print(letters[random_index])
Запуск этого кода несколько раз приведет к чему-то вроде:
f d d e
As random.randrange(len(letters))
возвращает случайно сгенерированное число в диапазоне 0
чтобы len(letters) - 1
, мы используем его для случайного доступа к элементу в letters
, как и в предыдущем подходе.
Этот подход немного проще предыдущего, просто потому, что мы не указываем начальную точку, которая по умолчанию равна 0
.
Использование random.choice()
Теперь еще лучшим решением, чем последнее, было бы использование random.choice ()
, поскольку именно эта функция предназначена для решения этой проблемы:
import random letters = ['a', 'b', 'c', 'd', 'e', 'f'] print(random.choice(letters))
Выполнение этого несколько раз приводит к:
b e e f e
Выбор Нескольких Случайных Элементов Из Списка Python
Использование random.sample()
Первый метод, который мы можем использовать для случайного выбора нескольких элементов, – это random.sample()
. Он производит образец, основанный на том, сколько образцов мы хотели бы наблюдать:
import random letters = ['a', 'b', 'c', 'd', 'e', 'f'] print(random.sample(letters, 3))
Это возвращает список:
['d', 'c', 'a']
Этот метод выбирает элементы без замены, то есть он выбирает без дубликатов и повторений.
Если мы запустим это:
print(random.sample(letters, len(letters)))
Поскольку он не возвращает дубликаты, он просто вернет весь наш список в рандомизированном порядке:
['a', 'e', 'c', 'd', 'f', 'b']
Использование случайных вариантов.()
Аналогично предыдущей функции, random.choices()
возвращает список случайно выбранных элементов из заданной итерации. Однако он не отслеживает выбранные элементы, поэтому вы также можете получить дубликаты элементов:
import random letters = ['a', 'b', 'c', 'd', 'e', 'f'] print(random.choices(letters, k=3))
Это возвращает что-то вроде:
['e', 'f', 'f']
Кроме того, если мы побежим:
print(random.choices(letters, k = len(letters)))
Он может вернуть что-то вроде:
['d', 'e', 'b', 'd', 'd', 'd']
random.choices
возвращает a k
-размерный список элементов, выбранных случайным образом с заменой.
Этот метод также может быть использован для реализации взвешенных случайных выборов, которые вы можете изучить далее в официальной документации Python .
Вывод
В этой статье мы рассмотрели несколько способов извлечения одного или нескольких случайно выбранных элементов из списка в Python.
Мы получили доступ к списку случайных индексов с помощью randint()
и randrange()
, но также получили случайные элементы с помощью choice()
и sample()
.