APP下载

Python多法生成“相异”随机数

2021-06-25牟晓东

电脑报 2021年1期
关键词:整数列表代码

牟晓东

众所周知,Python语言非常灵活,有着功能极为强大的标准库和第三方的不断支持,在进行各种数据的处理时非常方便。有时在编程解决同一个问题时会有多种编写方法,代码的简洁性和程序的运行效率各不相同。如果要求编程生成50个1000以内(包括0和1000)各不相同的随机整数,如何来求解呢?在此与大家共享三种方法:

1.列表元素的append()追加方法

該方法是最为常规的编程方法,尤其是在学习过其他编程语言(比如C)之后,可以这样来操作:

首先是通过“import random”来导入random库模块,因为程序中要使用random.randint()来生成随机数;接着建立一个名为aList的空列表,进入条件为真的循环结构(while True:)中,逻辑判断条件为“if len(aList) == 50:”,意思是使用len()函数求出列表aList内元素的个数是否为50个,是的话则使用break语句跳出整个循环结构;否则的话,执行“num = random.randint(0,1000)”语句,也就是将0至1000以内(包括0和1000)的某个随机整数赋值给变量num;然后又通过一个if条件判断语句“if num not in aList:”,检索一下该num值是否“不存在于列表aList中”,不存在的话则执行“aList.append(num)”语句,作用是将该num值通过列表元素的append()方法“追加”于列表aList中;如果该num值已经生成在列表aList中,则继续下一次循环;while循环结束后,此时列表aList中已经保存了50个1000以内的随机整数,最后使用print语句将它们逐个打印输出,一共是9行Python代码(如图1)。

2.集合元素的add()追加方法

Python的序列元素种类比较丰富,像列表、元组、字典、字符串、集合等等,各有各的特点和适用场合。比如Python集合的特点之一就是其中各元素的相异性,就是一个集合中不允许存在完全相同的“两个”元素,各元素都是唯一的。根据集合的这一特点,我们就可以通过以下代码来编程求解“相异”随机数:

首先通过“from random import randint”语句导入random库模块中的randint;接着通过“bSet = set()”语句建立空集合bSet,同样也是进入一个while循环,其逻辑判断条件是“while len(bSet)<50:”,意思是检查集合bSet中元素的个数是否小于50;条件成立的话,则执行“bSet.add(randint(0,1000))”语句,也就是通过集合的add()元素添加方法将生成的一个1000以内的随机整数添加到集合bSet中;注意该语句在执行操作时,如果恰好某次循环时生成的某个随机整数已经在之前的循环中生成并保存于集合bSet内,那么本次操作就不会将这个相同的元素添加到集合bSet中;最后仍然是使用print语句来打印输出集合bSet内保存的50个相异的随机整数,一共是5行Python代码(如图2)。

3.random.sample()函数方法

第三种方法更为简洁,充分利用了random库模块中的一个名为random.sample()的函数,其作用是截取列表指定长度的随机整数,返回的是一个指定长度的新列表,其中的元素是随机唯一的。编程如下:

首先仍然是import random语句;接着建立列表cList,为其赋值为“random.sample(range(0,1000),50)”,意思取50个0至1000以内的随机整数,作为一个“片断”返回;最后通过print语句打印输出cList的元素,仅仅是3行Python代码(如图3)。

如果你使用Spyder,那么观察右上方的“变量管理器”也不难发现,通过这三种方法分别会生成列表aList、集合bSet和列表cList,各自保存的元素均是50个1000以内的随机整数。num是第一种方法中为列表aList生成各随机整数的“中间变量”,其类型是整型int。

猜你喜欢

整数列表代码
扩列吧
这是流行病
列表法解分式方程问题探索
神秘的代码
一周机构净增(减)仓股前20名
重要股东二级市场增、减持明细
近期连续上涨7天以上的股
列表画树状图各有所长
2011年《小说月刊》转载列表
答案