13 ответов:
использовать
random.choice:import random foo = ['a', 'b', 'c', 'd', 'e'] print(random.choice(foo))для криптографически безопасного случайного выбора (например, для генерации парольной фразы из списка слов) используйте
random.SystemRandomкласс:import random foo = ['battery', 'correct', 'horse', 'staple'] secure_random = random.SystemRandom() print(secure_random.choice(foo))
Если Вам также нужен индекс, используйте
random.randrangefrom random import randrange random_index = randrange(len(foo)) print(foo[random_index])
если вы хотите случайным образом выбрать более одного элемента из списка или выбрать элемент из набора, я бы рекомендовал использовать
random.sampleвместо.import random group_of_items = {1, 2, 3, 4} # a sequence or set will work here. num_to_select = 2 # set the number to select here. list_of_random_items = random.sample(group_of_items, num_to_select) first_random_item = list_of_random_items[0] second_random_item = list_of_random_items[1]если вы только вытаскиваете один элемент из списка, выбор менее неуклюжий, так как использование sample будет иметь синтаксис
random.sample(some_list, 1)[0]вместоrandom.choice(some_list).к сожалению, выбор работает только для одного вывода из последовательностей (таких как списки или кортежи). Хотя
random.choice(tuple(some_set))может быть вариант для получения одного элемента из набора.
начиная с Python 3.6 вы можете использовать
secretsмодуль, который предпочтительнееrandomмодуль для шифрования или безопасности.чтобы вывести случайный элемент из списка:
import secrets foo = ['a', 'b', 'c', 'd', 'e'] print(secrets.choice(foo))чтобы вывести случайный индекс:
print(secrets.randbelow(len(foo)))Подробнее см. PEP 506.
Я предлагаю скрипт для удаления случайно подобранных элементов из списка, пока он не опустеет:
сохранить
setи удалить случайно подобранный элемент (сchoice) пока список пуст.s=set(range(1,6)) import random while len(s)>0: s.remove(random.choice(list(s))) print(s)три прогона дают три разных ответа:
>>> set([1, 3, 4, 5]) set([3, 4, 5]) set([3, 4]) set([4]) set([]) >>> set([1, 2, 3, 5]) set([2, 3, 5]) set([2, 3]) set([2]) set([]) >>> set([1, 2, 3, 5]) set([1, 2, 3]) set([1, 2]) set([1]) set([])
это код с переменной, которая определяет случайный индекс:
import random foo = ['a', 'b', 'c', 'd', 'e'] randomindex = random.randint(0,len(foo)-1) print (foo[randomindex]) ## print (randomindex)это код без переменной:
import random foo = ['a', 'b', 'c', 'd', 'e'] print (foo[random.randint(0,len(foo)-1)])и это код в самый короткий и умный способ сделать это:
import random foo = ['a', 'b', 'c', 'd', 'e'] print(random.choice(foo))(python 2.7)
foo = ['a', 'b', 'c', 'd', 'e'] number_of_samples = 1в python 2:
random_items = random.sample(population=foo, k=number_of_samples)в python 3:
random_items = random.choices(population=foo, k=number_of_samples)
Если вам нужен индекс просто использовать:
import random foo = ['a', 'b', 'c', 'd', 'e'] print int(random.random() * len(foo)) print foo[int(random.random() * len(foo))]случайные.выбор делает то же самое:)
как случайным образом выбрать элемент из списка?
Предположим, у меня есть следующий список:
foo = ['a', 'b', 'c', 'd', 'e']каков самый простой способ получить элемент в случайном порядке из этого списка?
если вы хотите близко к действительно случайные, тогда я предлагаю использовать
SystemRandomобъектrandomмодульchoiceспособ:>>> import random >>> sr = random.SystemRandom() >>> foo = list('abcde') >>> foo ['a', 'b', 'c', 'd', 'e']и так:
>>> sr.choice(foo) 'd' >>> sr.choice(foo) 'e' >>> sr.choice(foo) 'a' >>> sr.choice(foo) 'b' >>> sr.choice(foo) 'a' >>> sr.choice(foo) 'c' >>> sr.choice(foo) 'c'если вы хотите детерминированный псевдослучайный выбор, используйте
choiceфункция (которая на самом деле является связанным методом на
мы также можем сделать это с помощью randint.
from random import randint l= ['a','b','c'] def get_rand_element(l): if l: return l[randint(0,len(l)-1)] else: return None get_rand_element(l)
numpyустранение:numpy.random.choiceдля этого вопроса он работает так же, как и принятый ответ (
import random; random.choice()), но я добавил его, потому что программист, возможно, импортировалnumpyуже (как я) и также есть некоторые различия между двумя методами это может касаться вашего фактического случая использования.import numpy as np np.random.choice(foo) # randomly selects a single itemдля воспроизводимости, вы можете сделать:
np.random.seed(123) np.random.choice(foo) # first call will always return 'c'примеры один или несколько элементов, возвращены Ан
array, передать
Я сделал это, чтобы заставить его работать:
import random pick = ['Random','Random1','Random2','Random3'] print (pick[int(random.random() * len(pick))])
import random_necessary pick = ['Miss','Mrs','MiSs','Miss'] print pick [int(random_necessary.random_necessary() * len(pick))]Я надеюсь, что вы найдете это решение полезно.
Comments