Python如何从一个列表、元组或字符串中选择一个随机项目

1,464 阅读11分钟

如果我们想从一个列表、元组或字符串中选择一个随机项目,可以使用 random.choice() 函数。这个函数接受像列表、字符串和元组这样的顺序对象作为参数,并从中返回一个随机项目或元素。

在这个Python教程中,你将学习如何使用这个random.choice()函数,从像列表和元组这样的顺序对象中找到随机元素。

什么是Python random.choice函数?

random 是一个内置的Python模块,用于生成随机数和玩弄随机数据。

随机模块有很多方法,choice() 是其中之一。我们可以用该方法从一个非空的序列对象(如列表、元组和字符串)中挑选一个随机项。

random.choice()函数的语法

random.choice(seq)

choice 函数只接受一个参数seq (一个 Python 序列对象)。seq 对象可以是一个 list、元组或字符串。

random.choice 函数的返回值

它从序列对象中返回一个单一的随机值。如果序列对象是一个空的 list、tuple 或字符串,它会返回*"IndexError: list index out of range
"。*

例子

让我们看看一些例子 ***random.choice()***函数。

例子1

从一个列表中随机抽取一个项目

import random

discount_offer = ['10% off', '12% off', '14% off', '15% off']

random_pick = random.choice(discount_offer)

print(f'Congratulation you won {random_pick} on your first shopping')

输出

Congratulation you won 10% off on your first shopping

例子2

让我们看看另一个例子,用随机.choice()函数创建一个滚动的骰子。

import random

dice = [1, 2, 3, 4, 5, 6]

roll_dice = random.choice(dice)

print(f'You Got: {roll_dice}')

输出

You Got: 5

如何在Python中从列表中选择一个随机项?

假设你有一个随机数的列表,你希望选择一个随机数,你会怎么做?

在上面的例子中,我们已经用选择函数从列表中挑选了一个随机项。让我们看看另一个从列表中选择一个随机元素值的例子。

假设你有一个顶级奇迹电影的列表,你无法选择今天要看的电影,让我们写一个python脚本,帮助你挑选一个随机的电影。

import random

marvel_movies = ['Black Panther','Avengers: Endgame', 'Iron Man', 'Thor: Ragnarok', 'Spider-Man: Homecoming']

#select a random movie
to_watch = random.choice(marvel_movies)

print("Movie to watch today is: ", to_watch)


输出

Movie to watch today is: Avengers: Endgame

如何从一个列表中选择多个随机选项?

通过choice() 函数,我们只能从列表或任何其他顺序的对象中选择一个项目。如果我们想从一个列表中选择多个随机项目,我们必须在一个循环内运行选择函数。

例子 (从列表中选择3个随机值)

import random

dice  =list(range(1,7))  #create a list from 0 to 1

print("Diced rolled three times")
#roll dice 3 times
for i in range(3):
    dice_rolled = random.choice(dice)
    print(dice_rolled)

输出

Diced rolled three times
2
6
2

当我们想使用函数时,使用for循环和 ***random.choice()***函数将在我们想从一个列表中找到多个随机项目时起到作用。但还有另一种方法来执行类似的任务,即 random.choice() 函数。

random.choice函数

使用random.choices 函数,我们可以从一个列表中挑选 **k**数量的随机项目。

这个函数类似于 choice() 函数,但多了一些参数值。

random.choice()函数的语法

random.choices(population, weights=None, *, cum_weights=None, k=1)

random.choice()方法可以接受4个参数值

  1. population:它是一个顺序值,可以是一个列表、元组或字符串。
  2. weights:它是一个整数值的列表,定义了选择项目的概率权重。默认情况下,它的值是None ,意味着人口中的所有项目都有相同的随机选择概率。
  3. cum_weights: 它也是一个整数值的列表,定义了选择项目的权重。但它定义的是累积的可能性。例如,权重[2,1,1]与累积权重[2,3,4]类似。
  4. k:它代表一个整数,它定义了 k 从列表或任何其他顺序对象中选择随机项目的数量。它也是一个可选的参数值,默认值为1,这意味着如果不指定它,函数将返回一个单一项目的列表。

random.choice函数的返回值

该函数返回一个列表,其中有 k 数量的随机项目的列表。 人口对象中的随机项目的列表。

如果对象是一个空的列表、元组或字符串,它也会返回一个 IndexError。 人口 对象是一个空列表、元组或字符串,它也会返回IndexError。

例子

假设你拥有一个电子商务网站,你想给一些用户发放礼品券或折扣优惠。 k 数量的用户。折扣优惠从10%到60%不等,你希望随机选择这些用户的折扣优惠。 k用户。你还希望设置选择折扣优惠的概率,也就是说,你不希望所有的人都得到60%的折扣优惠。

import random

discount_offer = ['10% off','20% off', '30% off', '40% off','50% off', '60% off']

#the selection probability of 10%off is 

输出

['30% off', '20% off', '10% off', '20% off', '40% off', '30% off', '20% off', '40% off', '20% off', '10% off']


如何选择没有任何重复的随机多选?

random.choice()和random.choice()函数都可以用于选择多个随机项目,但它们都可以挑选重复的元素。如果我们想挑选没有重复的多个项目,我们必须使用 random.sample()函数。

语法

random.sample(population, k, counts=None)

抽样 函数类似于 选择函数,但这里的 k 的值必须等于或小于人口对象的大小,否则我们会收到*"ValueError:样本大于人口或为负数"。*

例子

import random

marvel_movies = ['Black Panther','Avengers: Endgame', 'Iron Man', 'Thor: Ragnarok', 'Spider-Man: Homecoming']

#select 3 random movies
to_watch = random.sample(marvel_movies, k=3)
print("Movies to watch today are: ", to_watch)

输出

Movies to watch today are: ['Black Panther', 'Spider-Man: Homecoming', 'Thor: Ragnarok']

如何从一个Python集合中选择一个随机项目?

random.choice函数只能作用于顺序数据对象,如list、tuple和string。如果我们试图使用choice或choice函数从列表中挑选一个随机项,我们会遇到这样的错误 TypeError: 'set' object is not subscriptable.

如果我们想从一个集合对象中选择一个随机项,首先需要使用 tuple() 和 list() 函数将该对象转换成一个元组或列表。

例子

import random

#set of movies
movies = ['Black Panther','Avengers: Endgame', 'Iron Man', 'Thor: Ragnarok', 'Spider-Man: Homecoming']

#select a random movie
to_watch = random.choice(list(movies))

print("Movie to watch today is: ", to_watch)

输出

Movie to watch today is: Avengers: Endgame

如何在一个整数的范围内随机选择一个数字

使用Python range()函数,我们可以创建一个整数序列,为了从中选择一个随机数,我们可以使用choice或options函数。

例子

让我们写一个脚本,可以随机地创建一个4位数的OTP。

import random

otp_range = range(1000,10000)

#pick a random 4 digit otp
otp = random.choice(otp_range)

print("Your 4 digit OTP is:", otp)

输出

Your 4 digit OTP is: 2393

如何使用random.choice()函数选择一个随机的布尔值?

在 Python 中只有两个布尔值 True 和 False。我们可以把这两个值放在一个 list 或 tuple 中,然后用函数随机选择其中任何一个 选择 函数随机选择其中一个。

例子

import random

#boolean vlues
booleans = (True, False)

#select a random boolean value
print(random.choice(booleans))

输出

False

如何使用 random.choice() 函数从一个元组中选择一个随机项?

与Python列表类似,我们可以使用一个元组对象作为choice()函数的参数,该函数将从元组中返回一个随机项。

如果元组是空的,该函数将引发 IndexError。

例子

import random

#a tuple of balls
balls = ("Red Ball", "Blue Ball", "Green Ball", "Yellow Ball")

#select a random colour ball from balls 
print(random.choice(balls))

输出

Yellow Ball

为了从一个元组中选择多个随机值,我们可以使用随机模块的 choices 函数。

import random

#a tuple of beg
beg = ("Red Ball", "Blue Ball", "Green Ball", "Yellow Ball")

#select random colour balls from beg 
print(random.choices(beg, k=5))

输出

['Green Ball', 'Yellow Ball', 'Green Ball', 'Blue Ball', 'Blue Ball']

How to select random key-value pairs from a dictionary?

choice 和 choices 函数只有在所有的字典键形成类似于索引号的结构时才会从字典中选择一个随机值。这意味着字典中的键必须从 0 开始直到 0 n-1,如下面的例子所示。

例子

import random

#dictionary
my_dict = {
    0: 50,
    1: 68,
    2: 70,
    3: 40
}

#select random value from dictionary
print(random.choice(my_dict))

输出

40

如果 dictionary 的键没有形成索引数的结构或有不同的数据类型,choice 和 choices 函数将返回 KeyError。

在这种情况下,我们需要使用 list() 或 tuple() 函数将 dictionary 转换为一个列表或元组。

例子 从一个字典中选择一个随机对

import random

#dictionary
balls = {
    'red': 50,
    'green': 68,
    'blue': 70,
    'yellow': 40
}

#select random key from dictionary
key = random.choice(list(balls))

print(f"The random value is {key}:{balls[key]}" )

输出

The random value is green:68

如何用索引号从一个列表中随机选择一个项目?

随机模块提供了一个 ***randrange(k)***函数,它返回一个在0k-1 之间的随机整数。我们可以用这个函数得到一个随机的索引号,用这个索引号我们可以从列表中得到这个项目。通过这个技巧,我们将得到项目和项目的索引号。

例子

import random

continents = ['Asia', 'Africa', 'North America', 'South America', 'Antartica', 'Europe', 'Oceania']

#get a random index number of continents
index = random.randrange(len(continents))

#print the random index number value and its item
print('Index:', index, 'Item:', continents[index])

输出

Index: 0 Item: Asia

如何从多个列表中选择一个随机值?

假设我们有两个列表old_usersnew_users ,我们想从这两个列表中随机选择一个名字。在这种情况下,我们首先需要将两个列表相加,使其成为一个单一的列表,然后用选择函数选择一个随机项目。

例子

import random

old_names = ['Rahul', 'Raj', 'Ravi']
new_names = ['Rohan', 'Rajesh', 'Rakesh']

#add both the lists
names = old_names + new_names

#select a random name
print(random.choice(names))

输出

Rohan

如何从一个多维数组中选择一个随机项目?

numpy.random.choice(a, size=k, replace=False) 方法的帮助下,我们可以生成一个k 随机索引号的列表。索引号的范围是0a,a是数组中存在的总行数。

例子

import numpy as np

#it will retrun a random ndarray of integer numbers with 2 items
#which range will vary from 0 to 9 (10 excluded)
print(np.random.choice(10, size=2))

输出

[5 3]

现在我们可以用同样的逻辑来寻找多维数组的随机行和列值,并访问一个随机项目。

例子

import numpy as np

#create a numpy array
array = np.array([[ 0, 1,  2],
                  [ 3,  4,  5],
                  [ 6,  7,  8]])

print("The Array is")
print(array)

#number of rows
number_of_rows = array.shape[0]

#select the random row and column
random_row,random_column = np.random.choice(number_of_rows,size=2, replace=False)

print("The random row is: ", end=" ")
print(array[random_row])

print("The random item is", end=" ")
print(array[random_row][random_column])

输出

The Array is
[[0 1 2]
 [3 4 5]
 [6 7 8]]
The random row is:  [6 7 8]
The random item is 6

结论

顾名思义,这个 随机模块是用来在Python中玩弄随机数据的。这种方法一般用于创建随机数、洗刷列表项和从连续的数据对象中挑选一个随机项。在本教程中,我们学习了如何使用Pythonrandom.choice() 函数从不同的数据对象(如列表、元组、字典和集合)中选择随机项目。choice函数只从顺序中返回一个随机值,要想选择多个随机值,随机模块还提供了 choices() 函数。

random.choice的快速总结

功能说明
random.choice(sequence)从序列对象中返回一个随机项目。
random.choices(sequence, k=4)从序列对象中返回4个随机项目。
random.choice(range(100,999))返回一个100到999之间的随机整数。
np.random.choice(3, size=2)返回包含2个整数的numpy数组,范围是0到3。

常见问题(Python random.choice面试问题)

1.random.choice()函数返回什么?

答案: 它从传递给它的顺序参数中返回一个随机项。

2.random.choice()函数返回什么?

答: 它从指定给它的顺序参数中返回一个随机项目的列表。随机项目的数量取决于k ,默认值为1。

3.编写一个python脚本,每次调用random.choice方法时,从列表中随机选择同一个项目。

import random
items  = ['pen', 'paper', 'pencil', 'book']

for i in range(10):
    #seed the random number generator
    random.seed(3)

    #pick the random number using choice function
    print(random.choice(items))

上例中的seed()函数将保存随机函数的状态,这意味着它将一次又一次地挑选相同的随机项目。

4.如果我们向choice和choice函数传递一个空的序列对象,会发生什么。

答案: 如果序列是一个空字符串、列表或元组,选择和选择函数将返回IndexError