Python ist一次,然后对其进行迭代或弹出以生成结果。这两种方法都会产生一个完全合适的“随机选择,无重复”流,只是在开始时引入了随机性。理论上,你可以使用集合的方法从集合中删除任意元素并返回它,但它可能不够随机。你到底为什么要这样做,当有random.choice

Python ist一次,然后对其进行迭代或弹出以生成结果。这两种方法都会产生一个完全合适的“随机选择,无重复”流,只是在开始时引入了随机性。理论上,你可以使用集合的方法从集合中删除任意元素并返回它,但它可能不够随机。你到底为什么要这样做,当有random.choice,python,list,random,Python,List,Random,ist一次,然后对其进行迭代或弹出以生成结果。这两种方法都会产生一个完全合适的“随机选择,无重复”流,只是在开始时引入了随机性。理论上,你可以使用集合的方法从集合中删除任意元素并返回它,但它可能不够随机。你到底为什么要这样做,当有random.choice()和random.randrange()?“random.choice()”将在空列表上显示“索引器:列表索引超出范围”。应该是这样的:这就是例外情况。从空列表中选择是错误的。返回None只是将can踢到某个随机的稍后点,在该点上无效的“元素


ist一次,然后对其进行迭代或弹出以生成结果。这两种方法都会产生一个完全合适的“随机选择,无重复”流,只是在开始时引入了随机性。理论上,你可以使用集合的方法从集合中删除任意元素并返回它,但它可能不够随机。你到底为什么要这样做,当有
random.choice()
random.randrange()
?“random.choice()”将在空列表上显示“索引器:列表索引超出范围”。应该是这样的:这就是例外情况。从空列表中选择是错误的。返回
None
只是将can踢到某个随机的稍后点,在该点上无效的“元素”触发异常;或者更糟糕的是,您得到的是一个错误的程序而不是一个异常,而且您甚至不知道它。请注意,
random.choices
带有替换,而
random.sample
没有替换。还请注意,random.choices在3.6及更高版本中可用,而不是以前!连续两次调用
random.choice(foo)
是否会返回两个不同的结果?@EduardoPignatelli每个选择都是随机的,因此它可以返回两个不同的结果,但这取决于起始种子,不能保证。如果要从列表lst中选择n个不同的随机元素,请在相关注释中使用,
标准伪随机生成器不适合用于安全/加密目的。
BTW
secrets
模块在发布新答案之前已添加到3.6版的Python标准库中,考虑到这个问题已经有10个答案了。请确保您的答案提供的信息不在现有答案中。这只是迂腐,但秘密不是真正随机的,而是加密安全的伪随机。
foo = ['a', 'b', 'c', 'd', 'e']
import random

foo = ['a', 'b', 'c', 'd', 'e']
print(random.choice(foo))
import secrets

foo = ['battery', 'correct', 'horse', 'staple']
print(secrets.choice(foo))
import random

secure_random = random.SystemRandom()
print(secure_random.choice(foo))
from random import randrange
random_index = randrange(len(foo))
print(foo[random_index])
import random
foo = ['a', 'b', 'c', 'd', 'e']
print int(random.random() * len(foo))
print foo[int(random.random() * len(foo))]
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([])
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)
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))
import random
group_of_items = {'a', 'b', 'c', 'd', 'e'}  # 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] 
import secrets                              # imports secure module.
secure_random = secrets.SystemRandom()      # creates a secure random object.
group_of_items = {'a', 'b', 'c', 'd', 'e'}  # a sequence or set will work here.
num_to_select = 2                           # set the number to select here.
list_of_random_items = secure_random.sample(group_of_items, num_to_select)
first_random_item = list_of_random_items[0]
second_random_item = list_of_random_items[1]
import random
first_random_item, second_random_item = random.sample({'a', 'b', 'c', 'd', 'e'}, 2)
import secrets
foo = ['a', 'b', 'c', 'd', 'e']
print(secrets.choice(foo))
print(secrets.randbelow(len(foo)))
foo = ['a', 'b', 'c', 'd', 'e']  
>>> from secrets import choice         # Python 3 only
>>> choice(list('abcde'))
'c'
>>> import random                      # Python 2 compatible
>>> 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'
>>> random.choice
<bound method Random.choice of <random.Random object at 0x800c1034>>
>>> random.seed(42); random.choice(foo), random.choice(foo), random.choice(foo)
('d', 'a', 'b')
>>> random.seed(42); random.choice(foo), random.choice(foo), random.choice(foo)
('d', 'a', 'b')
>>> random.seed(42); random.choice(foo), random.choice(foo), random.choice(foo)
('d', 'a', 'b')
>>> random.seed(42); random.choice(foo), random.choice(foo), random.choice(foo)
('d', 'a', 'b')
>>> random.seed(42); random.choice(foo), random.choice(foo), random.choice(foo)
('d', 'a', 'b')
def seed(self, *args, **kwds):
    "Stub method.  Not used for a system random number generator."
    return None
foo = ['a', 'b', 'c', 'd', 'e']
number_of_samples = 1
random_items = random.sample(population=foo, k=number_of_samples)
random_items = random.choices(population=foo, k=number_of_samples)
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'
np.random.choice(foo, 5)          # sample with replacement (default)
np.random.choice(foo, 5, False)   # sample without replacement
import random as random
random.seed(0)  # don't use seed function, if you want different results in each run
print(random.sample(foo,3))  # 3 is the number of sample you want to retrieve

Output:['d', 'e', 'a']
import random

my_list = [1, 2, 3, 4, 5]
num_selections = 2

new_list = random.sample(my_list, num_selections)
randIndex = random.sample(range(len(my_list)), n_selections)
randIndex.sort()
new_list = [my_list[i] for i in randIndex]
import random
foo = ['a', 'b', 'c', 'd', 'e']
random.shuffle(foo)