有趣的shuffle方法

简介: 有趣的shuffle方法

问题描述

Pythonrandom的“shuffle方法随机化序列项”是我们在学习中会经常遇到的一个知识点,今天我们就来简单的学习一下吧!

解决方案

在学习这个方法时我们就要了解他是怎样构成的。

第一:Python这门编程语言

第二:第三方库

第三:此函数


首先我们来介绍一下这个第三方库,random库是使用随机数的Python标准库,利用这个库可以随机的生成指定范围的随机数。下面我们简单的介绍一下他的用法。我们通过一张图来了解一下它。


简单了解random库的使用方法后,我们再来了解一下shuffle函数。我们将学习如何使用随机模块的shuffle方法来混洗数据。另外,学习如何随机播放 Python中的列表和字符串。我们在使用这个函数时一定要首先引入random库,否则是代码是不能够执行的。

1、random.shuffle的语法

random.shuffle(x,随机)

shuffle方法有两个参数。两个随机数中的一个是可选参数。无序播放法,用于将序列无序播放到位。也就是说,它改变了列表中项目的位置。我们称之为随机化列表中的元素。

2、Python使用random.shuffle对列表进行洗牌

import random

number_list =  [7,14,21,28,35,42,49,56,63,70]

print("原始列表:",number_list)


random.shuffle(number_list)   #shuffle方法

print("第一次洗牌之后的列表:",number_list)


random.shuffle(number_list)

print("第二次洗牌之后列出:",number_list)

原始列表: [7, 14, 21, 28, 35, 42, 49, 56,  63, 70]

first shuffle:之后的列表: [35, 28, 70,  14, 21, 63, 7, 49, 42, 56]

第二次洗牌之后列出: [21, 7,  70, 28, 56, 14, 63, 42, 35, 49]

这个就是对列表洗牌的结果,我们可以从输出的结果中看到,每个项目的位置已经改变。解决我们的免费随机数据生成练习,掌握Python中的随机数据生成技术。

2.1 使用random.shuffle()随机播放字符串列表

import  random

string_list  = ["Paint It Black","Gimme Shelter","同情魔鬼","满意","你不能总是得到你想要的东西"]

print("原始字符串列表:",string_list)

random.shuffle(string_list)      #shuffle方法

print("第一次shuffle之后的字符串列表:",string_list)

random.shuffle(string_list)

print("第二次shuffle后的字符串列表:",string_list)

 

原始字符串列表: ['Paint It Black', 'Gimme Shelter', '同情魔鬼',  '满意', '你不能总是得到你想要的东西']

第一次shuffle之后的字符串列表: ['Gimme Shelter', '你不能总是得到你想要的东西', '同情魔鬼', 'Paint It Black', '满意']

第二次shuffle后的字符串列表: ['满意', 'Gimme Shelter', 'Paint It Black', '你不能总是得到你想要的东西', '同情魔鬼']

这个和上面的那个例子是一样的。

2.2 Python shuffling list每次都能获得相同的结果

如何使用参数对列表进行无序排列,以便每次进行无序排列时都产生相同的结果?

使用随机模块的random.seed()方法,每次洗牌都可能产生相同的结果。让我们看看如何将种子方法与随机播放方法结合使用。

import  random

numbers  = [10, 20, 30, 40, 50, 60]

print  ("Original list: ", numbers )

random.seed(4)

random.shuffle(numbers)

print("reshuffled  list ", numbers)

numbers  = [10, 20, 30, 40, 50, 60]

random.seed(4)

random.shuffle(numbers)

print("reshuffled  list ", numbers)

 

Original  list:  [10, 20, 30, 40, 50, 60]

reshuffled  list  [40, 60, 50, 10, 30, 20]

reshuffled  list  [40, 60, 50, 10, 30, 20]

注意:因为每次调用shuffle方法之前使用相同的seed值时,在执行多次shuffle操作之后,我们都会得到相同的列表。

3、在Python中改组一个字符串

random.shuffle不适用于字符串。也就是说,它不能接受字符串参数。如果尝试执行以下操作,将出现错误。

我们得到类型错误:“str”对象不支持项分配。然后如何洗牌字符串的字符。我们可以使用各种方法来实现这一点。让我们逐一讨论。

将字符串转换为字符列表。

随机地拖动字符列表。

将无序排列的列表转换为字符串。

import random

string_one = "pynative"

print ("Original String: ",  string_one)

char_list = list(string_one) #  convert string inti list

random.shuffle(char_list) #shuffle  the list

string_one = ''.join(char_list)

print ("shuffled  String is: ", string_one)


Original String:  pynative

shuffled String is:  eytavpin

这样我们就能够正常的执行代码了

4、Python随机的shuffle not-in-place

正如我们已经讨论过的,随机洗牌在适当的位置进行,没有返回任何内容。现在让我们来看看如何在不适当的位置无序排列列表。要执行不到位的无序播放,我们需要使用简单的随机模块方法。random.sample()方法返回新列表,其中包含传递给它的样本大小。如果我们传递的示例大小与列表的大小相同,它将返回新列表,该列表是原始列表的无序版本。让我们用一个例子来做这个。

import random

numbers = [5, 10, 15, 20, 25]

print ("Original list :  ",  numbers)

new_list = random.sample(numbers,  len(numbers))

print ("List after  not in-place shuffle  : ",  new_list)


Original list :  [5, 10, 15, 20, 25]

List after not in-place  shuffle  :  [25, 5, 10, 20, 15]

如您所见,我们使用了一个示例方法来执行非就地无序播放。

我们首先定义了一个新的列表来存储新的排序,再用新的方法来对其进行随机排序。

5、使用相同的顺序一次洗牌两个Python列表

假设您想随机播放两个列表,但又想保持相同的随机播放顺序。例如,一个列表包含学生姓名,另一个列表包含成绩。

import random

empName = ['Jhon', 'Emma', 'Kelly',  'Jason']

empAchievement = [90, 85, 87, 100]

print("Print Lists Before  Shuffling")

print("List Employee Names:  ", empName)

print("List Employee Salary:  ", empAchievement)

mapIndexPosition = list(zip(empName,  empAchievement))

random.shuffle(mapIndexPosition)

empName, empAchievement =  zip(*mapIndexPosition)

print("\nPrint Lists after  Shuffling")

print("List Employee Names:  ", empName)

print("List Employee  Salary: ", empAchievement)


Print Lists Before Shuffling

List Employee Names:  ['Jhon', 'Emma', 'Kelly', 'Jason']

List Employee Achievement:  [90, 85, 87, 100]

Print Lists after Shuffling

List Employee Names:  ('Jason', 'Jhon', 'Kelly', 'Emma')

List Employee  Achievement:  (100, 90, 87, 85)

这样两个列表就能够同时随机变换位置了。

6、在Python中改组多维数组

假设您有一个多维数组,并且想要对其进行无序排列。在这个例子中,我使用numpy模块创建一个二维数组。另外,使用numpy.random.shuffle()方法,我们可以对多维数组进行无序处理。              

现在,让我们看看如何在Python中无序排列多维数组。

import numpy


print("Before Shufflling  2-dimensional array in Python")

sampleArray = numpy.arange(100, 240,  10)

sampleArray =  sampleArray.reshape(7,2)

print (sampleArray)


print("After Shufflling  2-dimensional array in Python")

newArray =  numpy.random.shuffle(sampleArray)

print (sampleArray)


Before Shufflling 2-dimensional array  in Python

[[100 110]

 [120 130]

 [140 150]

 [160 170]

 [180 190]

 [200 210]

 [220 230]]

After Shufflling 2-dimensional array  in Python

[[100 110]

 [140 150]

 [160 170]

 [180 190]

 [120 130]

 [200 210]

 [220 230]]

这样我们就可以对多维数组进行无序排列了。

7、在Python中随机播放字典

在python中不可能修改字典。但是,我们可以重新排列字典键的迭代顺序。从字典中提取所有键并将其添加到列表中,无序排列该列表并使用新无序排列的键访问字典值。

import random

studentDict = {'Eric':80, 'Scott':75,  'Jessa':95, 'Mike':66}

print("Dictionary Before  Shuffling")

print(studentDict)

keys =  list(studentDict.keys())

random.shuffle(keys)


ShuffledStudentDict = dict()

for key in keys:

   ShuffledStudentDict.update({key:studentDict[key]})


print("\nDictionary after  Shuffling")

print(ShuffledStudentDict)


Dictionary Before Shuffling

{'Eric': 80, 'Scott': 75, 'Jessa':  95, 'Mike': 66}


Dictionary after Shuffling

{'Mike': 66, 'Scott': 75,  'Eric': 80, 'Jessa': 95}

我们都知道字典中键和值是一一对应的,我们通过相应的键获取对应的值。,在上面的随机变换中我们先获取键,然后在通过键获取对应值的数据

结语

通过上面对shuffle函数的学习,我们需要注意的是以下几点:

1、在使用这个函数时我们一定要记得引入相应的库,在这个函数中我们常用的库有random库和numpy库,我们引入库之后再执行相应的代码。

2、在shuffle函数中是不能够接受字符串这种数据类型的,我们需要将字符串转换成其他数据类型。如果直接输入字符串则会报错。

目录
相关文章
|
25天前
|
分布式计算 监控 大数据
如何优化Spark中的shuffle操作?
【10月更文挑战第18天】
|
6月前
|
算法 数据挖掘 开发者
random_shuffle()详解
random_shuffle()详解
|
算法 开发者 索引
【C++11算法】random_shuffle和shuffle
【C++11算法】random_shuffle和shuffle
315 0
|
7月前
|
分布式计算 Java 调度
Spark中的Shuffle过程是什么?为什么它在性能上很关键?
Spark中的Shuffle过程是什么?为什么它在性能上很关键?
260 0
|
7月前
|
分布式计算
MapReduce【Shuffle-Combiner】
MapReduce【Shuffle-Combiner】
|
缓存 分布式计算
25 MAPREDUCE的shuffle机制
25 MAPREDUCE的shuffle机制
70 0
|
分布式计算 算法 Java
Spark shuffle、RDD 算子【重要】
Spark shuffle、RDD 算子【重要】
358 0
|
存储 分布式计算 索引
MapReduce 的 shuffle 阶段【重要】
MapReduce 的 shuffle 阶段【重要】
169 0
|
SQL 分布式计算 开发工具
Spark 3.1.1 shuffle fetch 导致shuffle错位的问题
Spark 3.1.1 shuffle fetch 导致shuffle错位的问题
514 0
|
分布式计算 Hadoop
wordcount详解shuffle机制
wordcount详解shuffle机制
79 0