python中random模块shuffle()的用法

今天需要根据字典生成一个随机排列的列表,字典为mydict,列表为mylist。

执行下列代码:

import random
mydict = {'one':'Gao','two':'Wu','three':'Wang','four':'zhao'}
mylist = random.shuffle(mydict)

提示如下错误:
Traceback (most recent call last):
File “<pyshell#23>”, line 1, in
mydict = random.shuffle(mydict)
File “C:\Program Files\Python311\Lib\random.py”, line 380, in shuffle
x[i], x[j] = x[j], x[i]
经查资料,发现shuffle()只支持对列表进行随机排序。
因此,修改代码如下:

import random
mydict = {'one':'Gao','two':'Wu','three':'Wang','four':'zhao'}
mylist = random.shuffle(list(mydict))
print(mylist)

输出:
None

试了几次都是输出None,再看资料才发现,原来shuffle()的正确输出就是None。
那怎么得到随机排序的列表呢?
经查找资料,发现shuffle()属于破坏性操作。可以直接将作为参数的列表重新随机排列,而不是赋值给其它变量。因此,修改代码如下:

import random
mylist = list(mydict)  #取得字典的键列表,也可使用:mylist = mydict.keys()
print(mylist)  #输出:['one', 'two', 'three', 'four']
random.shuffle(mylist)   # 直接将mylist列表修改为随机排列
print(mylist)   # 显示随机排列后的mylist列表:['one', 'three', 'two', 'four']

终于得到了想要的随机排列。
此时,如何想得到shuffle()破坏之前的排列,还得再次执行:

mylist = list(mydict)

也就是说,mylist经过shuffle()操作后,无法恢复原有排列,只能重新生成。
顺便说一句,如果要得到字典的值列表,可以执行:

mylist =mydict.values()

猜你喜欢

转载自blog.csdn.net/any1where/article/details/128237221