1. 程式人生 > >Python 產生特定範圍內不重複多個隨機數的兩種方法

Python 產生特定範圍內不重複多個隨機數的兩種方法

在近期進行的一個實驗中,需要將資料按一定比例隨機分割為兩個部分。這一問題的核心其實就是產生不重複隨機數的問題。首先想到的遞迴的方法,然後才發現Python中居然已經提供了此方法的函式,可以直接使用。具體程式碼如下:

#生成某區間內不重複的N個隨機數的方法
import random;

#1、利用遞迴生成
resultList=[];#用於存放結果的List
A=1; #最小隨機數
B=10 #最大隨機數
COUNT=10

#生成隨機數的遞迴數學,引數counter表示當前準備要生成的第幾個有效隨機數
def generateRand(counter): 
    tempInt=random.randint(A,B); # 生成一個範圍內的臨時隨機數,
    if(counter<=COUNT): # 先看隨機數的總個數是不是夠了,如果不夠
        if(tempInt not in resultList): # 再檢查當前已經生成的臨時隨機數是不是已經存在,如果不存在
            resultList.append(tempInt); #則將其追加到結果List中
            counter+=1;# 然後將表示有效結果的個數加1. 請注意這裡,如果臨時隨機數已經存在,則此if不成立,那麼將直接執行16行,counter不用再加1
        generateRand(counter); # 不管上面的if是否成立,都要遞迴。如果上面的臨時隨機數有效,則這裡的conter會加1,如果上面的臨時隨機數已經存在了,則需要重新再生成一次隨機數,counter不能變化
generateRand(1);#呼叫遞迴函式,並給當前要生成的有效隨機數的個序號置為1,因為要從第一個開始嘛
print(resultList)# 列印結果

#2、利用Python中的randomw.sample()函式實現
resultList=random.sample(range(A,B+1),COUNT); # sample(x,y)函式的作用是從序列x中,隨機選擇y個不重複的元素。上面的方法寫了那麼多,其實Python一句話就完成了。
print(resultList)# 列印結果

結果:


相關推薦

Python 產生特定範圍重複隨機數方法

在近期進行的一個實驗中,需要將資料按一定比例隨機分割為兩個部分。這一問題的核心其實就是產生不重複隨機數的問題。首先想到的遞迴的方法,然後才發現Python中居然已經提供了此方法的函式,可以直接使用。具

python 獲取一定範圍重複隨機數列表

需求:生成3個不同的隨機數,隨機數大於100001小於100200 import random b_list = range(100001,100200) blist_webId = random.sample(b_list, 3) print blist_webId 列印大致如下: [10

java產生任意範圍重複隨機數

n:需要的隨機數的數目 min:下限; max:上限 import java.util.* ; class Tester { public static void main(String args[]) { HashSet<Integer> set =

C語言、Java方式下的——規定範圍重複隨機數

示例1:C語言版 #include <stdio.h> #include <stdlib.h> #include <time.h> //隨機產生規定個數的不重複數字 int findSame(int *arr, int in, int

java生成指定範圍重複隨機數(包含邊界值)

生成指定範圍內的隨機數rand.nextInt(100);這行程式碼將生成範圍 0~100 之間的隨機數,有趣的是,取值可能為 0,但不可能為 100。因為隨機生成值區間是 [0, 100)範圍內的整數,實際上就是區間 [0, 99]。因為最大邊界為100,可惜不能等於100

[Linux] yum只下載安裝rpm包的方法

方法一:通過yum自帶一個工具:yumdownloader [[email protected] ~]#  rpm -qa |grep yum-utils [[email protected] ~]# yum-y install yum-utils* [[email prote

判斷字串是是迴文的方法

方法一:用棧存取前半截數,然後與後半截挨個比較。 #include<stdlib.h> #include<stdio.h> #include<string.h> int main(int argc,char* argv[]) { ch

Python實現"二叉樹的最大深度"的方法

給定一棵二叉樹,返回它的最大深度 最大深度是指樹中最長路徑所擁有的結點數量 注意:葉子節點沒有子節點 例如: 給定二叉樹[3,9,20,null,null,15,7] 3 / \ 9 20 / \ 15 7 它的返回值為3

python爬蟲之scrapy中user agent淺談(方法

user agent簡述 User Agent中文名為使用者代理,簡稱 UA,它是一個特殊字串頭,使得伺服器能夠識別客戶使用的作業系統及版本、CPU 型別、瀏覽器及版本、瀏覽器渲染引擎、瀏覽器語言、瀏覽器外掛等。 開始(測試不同型別user agent返回值) 手機use

C# 防止程序開的方法

獲取 message 進程資源 信息 lse 多次 ase send true 互斥對象防止程序多開 private void Form1_Load(object sender, EventArgs e) { bool Exist;//定義一個bo

獲取特定範圍隨機數,保留2位

double型別保留小數位 //取值範圍為[0.7,1) //區間最大值 int max = 1 //區間最小值 int min = 0.7 //保留的小數位 int scale = 2 num = new Bigdecimal(Math.random() * (max - min)

生成指定數量,指定範圍重複隨機數

function randNum2(min,max,num){ if(num > max - min){ console.error('範圍太小'); return false; } var range = max - min, minV =

Python列印某範圍的素數

繼續練手Python基礎部分:用Python實現某範圍的素數列印 分別用while迴圈和for迴圈實現,然後用自定義函式方式,程式碼如下: # -*- coding: utf-8 -*- """ Cr

C#產生一組重複隨機數方法

最近在開發專案的過程中,需要產生一些隨機數,如果我們簡單的用C#中的Random.Next方法,很難產生一組少重複的隨機數(當然是偽隨機數),在網上也看了很多方法,貌似也不可行,或者比較複雜。於是,參考網上的一些方法,自己寫了兩個個產生一組偽隨機數的方法。 方法一的程式碼如

產生重複數字的隨機數生成器

在Swift中,可以使用函式型別的引數,也可以使用函式型別的返回值。而作為返回值的函式,還能“捕獲”外部的值,並多次使用它。這個特性,常可用來建立各種生成器。 下面通過建立一個“隨機數生成器函式”作為演示: 在指定範圍內生成隨機數,同時每次生成的隨機數都

Matlab產生特定範圍隨機數矩陣

都知道rand(m,n)是隨機產生一個m行,n列的矩陣,rand()的特點是隻能產生0至1之間的隨機數,那麼要圈定矩陣的取值範圍該怎麼辦? 例如:        想產生一個2行2列的隨機矩陣,要求取值範圍在1-10之間         >>data=1+9*ra

C++演示在不同的範圍沖突使用同名變量的範例的代碼

資料 ios space namespace 沖突 ret names func sin 把做工程過程中經常用的內容段珍藏起來,下邊資料是關於C++演示在不同的範圍內不沖突使用同名變量的範例的內容。 #include <iostream> using std:

C C++程式設計產生指定範圍隨機數

C/C++程式設計產生指定範圍內的隨機數,直接上個小程式: #include <stdlib.h> // 對應於C++中cstdlib #include <time.h> //

生成指定數量、指定範圍重複隨機數

生成不重複的數  包含最大值 :取 min < value =< max  function randNum2(min,max,num){ if(num > max - min){ console.error('範圍太小'); return fa

淺談方法實現瀏覽器標簽頁之間的通信

tools view -s data- oca microsoft oar art set 調用localstorge、cookies等本地存儲方式。 方法一: localstorge在一個標簽頁裏被添加、修改或刪除時,都會觸發一個storage事件,通過在另一個標簽頁裏監