Вступление
Выбор случайного элемента или значения из списка - обычная задача - будь то случайный результат из списка рекомендаций или просто случайный запрос.
В этой статье мы рассмотрим, как случайным образом выбирать элементы из списка в Python . Мы рассмотрим извлечение как единичных случайных элементов, так и извлечение нескольких элементов - с повторением и без.
Выбор случайного элемента из списка Python
Самый интуитивно понятный и естественный подход к решению этой проблемы
- создать случайное число, которое действует как индекс для доступа к элементу из списка.
Чтобы реализовать этот подход, давайте рассмотрим некоторые методы
генерации случайных чисел в Python: random.randint()
и
random.randrange()
. Мы можем дополнительно использовать
random.choise()
и предоставить итерацию, в результате чего
возвращается случайный элемент из этой итерации.
Использование random.randint ()
random.randint(a, b)
возвращает случайное целое число от a
до b
включительно.
Нам понадобится случайный индекс в диапазоне от 0
до 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 <= n < a
:
import random
letters = ['a', 'b', 'c', 'd', 'e', 'f']
random_index = random.randrange(len(letters))
print(letters[random_index])
Выполнение этого кода несколько раз приведет к примерно следующим результатам:
f
d
d
e
Поскольку 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 ()
Подобно предыдущей функции, 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
возвращает k
размерный список элементов, выбранных
случайным образом с заменой.
Этот метод также можно использовать для реализации взвешенного случайного выбора, который вы можете подробнее изучить в официальной документации Python .
Заключение
В этой статье мы изучили несколько способов получить один или несколько случайно выбранных элементов из списка в Python.
Мы получили доступ к списку в случайных индексах с помощью randint()
и
randrange()
, но также получили случайные элементы с помощью
choice()
и sample()
.