Python|有趣的shuffle方法

作者: 烟雨丿丶蓝 | 来源:发表于2019-06-11 13:56 被阅读4次

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

    解决方案

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

    第一:Python这门编程语言

    第二:第三方库

    第三:此函数

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

    image

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

    在这推荐下小编创建的Python学习交流群835017344,可以获取Python入门基础教程,送给每一位小伙伴,这里是小白聚集地,每天还会直播和大家交流分享经验哦,欢迎初学和进阶中的小伙伴。


    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不适用于字符串。也就是说,它不能接受字符串参数。如果尝试执行以下操作,将出现错误。

    image

    我们得到类型错误:“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函数中是不能够接受字符串这种数据类型的,我们需要将字符串转换成其他数据类型。如果直接输入字符串则会报错。

    相关文章

      网友评论

        本文标题:Python|有趣的shuffle方法

        本文链接:https://www.haomeiwen.com/subject/bsfqfctx.html