Python 生成一個不重複隨機list(無放回)

在一個範圍內,生成一個元素數量固定的隨機不重複list.

錯誤方法

使用for循環逐一對生成每個值進行判斷,在有重複值的時候,不會被被添加.在需要生成多個隨機值的時候,容易出現輸出的結果比較少的情況.比如下面需要生成20個隨機值,可是一般輸出的都不到20.

import random
all_num = 100
a_list = [i for i in range(all_num)]
b_list = []
num = 20

for i in range(num):
  random_number = random.randint(1,all_num-1)
  if random_number not in b_list:
    b_list.append(random_number)
print(b_list)
print(len(b_list))

可以符合需求的

import random
all_num = 100
a_list = [i for i in range(all_num)]
num = 20


def make_random():
    b_length = 1
    b_list = []
    while b_length<=num:
        random_number = random.randint(1, all_num - 1)
        if random_number not in b_list:
            b_list.append(random_number)
            b_length = len(b_list)+1
    return b_list
print(make_random())
print(len(make_random()))

這裏使用的list的元素個數來作爲判斷條件,保證了個數.
這裏有一點值得注意的是b_list放在函數裏面比較合適,如果放在函數外面定義,在

print(len(make_random()))

結果會爲21,因爲函數裏定義b_length=1,函數會再給b_list增加一個元素進去.
可以適當修改解決…

直接調用random.sample

all_num = 100
num = 20
result=random.sample(range(1,all_num),num)
print(result)
print(len(result))
  • 這個是滿足需求且簡單的實現方法

 

發佈了455 篇原創文章 · 獲贊 894 · 訪問量 233萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章