Python从列表中随机获取元素方法:可以使用python中random模块的sample, choice, choices,randint方法来进行。下面我们一起来看下四种从列表中随机获取元素方法:
sample
random.sample(sequence, k)
sample的作用是从指定序列中随机获取指定长度的片断并随机排列,结果以列表的形式返回。
注意:sample函数不会修改原有序列(下述的其余方法也不会),sample是不会重复取值的。
参数sequence表示一个有序类型。这里要说明 一下:sequence在python不是一种特定的类型,而是泛指一系列的类型。list, tuple, 字符串都属于sequence(字典和集合都是无序的)
参数
- sequence:有序类型
- k:取值个数
返回值
传入有序类型的随机项,值为列表类型
实例
# -*- coding: utf-8 -*-
from random import sample
test_list = [1, 2, 3, 4, 5]
result = sample(test_list, k=3)
print('result:', result)
# sample函数不会修改原有序列
print('test_list:', test_list)
执行结果:
result: [5, 4, 1]
test_list: [1, 2, 3, 4, 5]
choice
random.choice(sequence)
choice和sample一样,是返回传入有序类型的随机项,但是choice返回的值有可能是重复的。
参数
sequence:有序类型
返回值
传入有序类型的随机项
实例
# -*- coding: utf-8 -*-
from random import choice
test_list = [1, 2, 3, 4, 5]
for num in range(3):
print('num:', choice(test_list))
执行结果:
num: 2
num: 5
num: 5
choice创建随机密码组合案例:
import string #string module里包含了阿拉伯数字,ascii码,特殊符号
import random #需要利用到choice
a = int(input('请输入要求的密码长度'))
b = string.digits + string.ascii_letters + string.punctuation #构建密码池
password = "" #命名一个字符串
for i in range(0,a): #for loop 指定重复次数
password = password + random.choice(b) #从密码池中随机挑选内容构建密码
print(password) #输出密码
choices
random.choices(sequence[, weights=None, cum_weights=None, k=1])
choices也是返回传入有序类型的随机项,choices和sample一样可以设置返回值的个数,choices返回值也有可能是重复的。
参数
- [] — 代表是可选参数
- sequence:必须。列表,元组,数字范围等序列。
- weights:可选。列表是可以权衡每个值的可能性。默认:None
- cum_weights:可选。列表是可以权衡每个值的可能性,只有这一次累积的可能性。
示例:正常权重列表:[2,1,1]与此cum_weights列表相同; [2,3,4]。默认:None - k:可选。一个定义返回列表长度的整数
返回值
传入有序类型的随机项,值为列表类型
实例
# -*- coding: utf-8 -*-
from random import choices
test_list = [1, 2, 3, 4, 5]
for num in range(3):
print('num:', choices(test_list))
# choices可以设置返回值个数
result = choices(test_list, k=3)
print('result:', result)
执行结果:
num: [5]
num: [4]
num: [4]
result: [3, 5, 3]
randint
random.randint(a, b)
randint可以随机生成一个在a-b范围内的随机整数(包括a和b(Return random integer in range [a, b], including both end points.)。
我们可以通过将a设置为:0,b的值设置为len(list) – 1,生成一个不超过列表长度的随机数,通过下标的方式来随机获取一个列表中的值。也可以配合list中的pop、del对列表进行修改,下面是实例代码:
实例
# -*- coding: utf-8 -*-
from random import randint
test_list = [1, 2, 3, 4, 5]
index = randint(0, len(test_list) - 1)
result = test_list[index]
print('result:', result)
for _ in range(5):
index = randint(0, len(test_list) - 1)
result = test_list[index]
print(_, result)
# 如果想将取出的值从列表中去除,可以配合list.pop()
print(test_list)
index = randint(0, len(test_list) - 1)
result = test_list.pop(index)
print(test_list)
执行结果:
result: 4
0 2
1 2
2 1
3 3
4 1