解決raise ValueError("Sample larger than population")問題

首先上源碼:

 

from numpy import *
import numpy as np
import random

def creRowData(n):

    # matrix = np.random.randint(0,10,size=[m,1])
    data_list = []

    # for i in range(m):
    numOjob = random.randint(2, 4)
    data_list.append(numOjob)
    # 工序數
    for i in range(numOjob):
        timeOJobOnM,numOMachine = extendData(n)
        data_list.append(numOMachine)
        data_list = data_list + timeOJobOnM

    return data_list
# 'random.randint(2,4)'.join(str() for ad in range(random.randint(1,4)))
# ”.join():作用是將引號裏內容加入到括號裏元素之間,是字符串操作函數。
'''n個機器'''
def extendData(n):
    a = random.randint(3,n)
    select_list = range(1, n)

    X = sorted(random.sample(select_list,a)) # n是你想隨機想選出的個數
    c = 1
    str_1 = X
    str_list = list(str_1)

    for i in range(len(X)):
        # 在每個標號後隨機花費時間
        t = [random.randint(1, 15)]
        new_str =str_list[:c]+list(t)+str_list[c:]
        # print(new_str,str_list[:c], str_list[c:])n
        # 更新
        str_list = new_str
        c += 2
    return new_str,a

Date = creRowData(10)
print(Date)

 

然後結果是這樣報錯的:

   

問題就出在a = random.randint(3,n) ; select_list = range(1, n)這兩行上,因爲range(1,n)產生的整數列[1,2,3,,,n-1]不包含n,而上一句random.randint(3,n)意思是產生3--n中的一個整數,而這個整數很可能是n,對於random.sample(select_list,a)意思是從列表select_list中任意選出a個數,如果a=n的話,明顯已經超過了列表select_list的個數了,所以就會出現圖示錯誤,當然多運行幾遍你會發現有時也能正常運行,這就是產生的隨機數a不等於n的效果。

   既然發現了錯誤,改正也很簡單了,直接select_list = range(1, n+1)即可。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章