python生成不重復(fù)隨機(jī)數(shù)和對(duì)list亂序的解決方法
andom.sample(list, n)即是從list中隨機(jī)選取n個(gè)不同的元素
# -*- coding: utf-8 -*- import random # 從一個(gè)list中隨機(jī)挑選5個(gè) list = [12, 23, 13, 14, 78, 234, 123, 12345] randomlist = random.sample(list, 5) print randomlist # 在range(10)中隨機(jī)生成5個(gè)不重復(fù)的數(shù),可以作為隨機(jī)下標(biāo)集合,然后到list中取數(shù) len = list.__len__() indexList = range(len) randomIndex = random.sample(indexList, 5) for i in randomIndex: print "下標(biāo)為%d" % i print list[i]
對(duì)list進(jìn)行洗牌,亂序排序,random.shuffle(list),注意原來的list會(huì)被改變
# -*- coding: utf-8 -*- import random # 對(duì)list洗牌,在原list上做改變 list = range(10) print list random.shuffle(list) print "隨機(jī)排序列表 : ", list
關(guān)于生成隨機(jī)的不重復(fù)數(shù),我被面試過兩次,有一次的應(yīng)用場景是抽獎(jiǎng)。
我當(dāng)時(shí)提出的解決方案是:將生成的隨機(jī)數(shù)(數(shù)組的隨機(jī)下標(biāo))放在一個(gè)數(shù)組中,每次對(duì)新生成的隨機(jī)數(shù)首先判斷是否已經(jīng)存在,如果不存在就加入這個(gè)數(shù)組,如果存在就重新生成隨機(jī)數(shù),直到這個(gè)數(shù)組中的元素個(gè)數(shù)到達(dá)一個(gè)特定值,然后拿著這個(gè)隨機(jī)下標(biāo)數(shù)組到原數(shù)組中去取元素。面試官問我時(shí)間復(fù)雜度問我是多少,我說O(n^2),面試官問我有沒有改進(jìn)方案,我想了一會(huì)沒想出來。
回到宿舍后舍友說,你可以每次對(duì)選中的元素和最后元素交換以下,下一次生成隨機(jī)數(shù)的時(shí)候就在前n-1個(gè)元素中生成,這樣每次只要交換一次元素,就不用去那個(gè)數(shù)組中判斷當(dāng)前下標(biāo)是否已經(jīng)被生成過一次,時(shí)間復(fù)雜度變成O(n),不由佩服。
Java中提供了list.contains(ele)函數(shù),可以直接判斷指定容器中是否存在某個(gè)元素,這樣就不用寫二重循環(huán)了,但是時(shí)間復(fù)雜度仍然是O(n^2)
不過今天看了一下python中的sample函數(shù)(隨機(jī)選取種子點(diǎn))直接就能達(dá)到我要的結(jié)果,下次再寫抽獎(jiǎng)函數(shù)一行代碼就搞定了。
以上這篇python生成不重復(fù)隨機(jī)數(shù)和對(duì)list亂序的解決方法就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python解決pip install時(shí)出現(xiàn)的Could not fetch URL問題
這篇文章主要介紹了Python解決pip install時(shí)出現(xiàn)的Could not fetch URL問題,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-08-08四行Python3代碼實(shí)現(xiàn)圖片添加美顏效果
這篇文章主要為大家介紹了如何利用Python語言實(shí)現(xiàn)給圖片添加美顏效果,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起了解一下2022-04-04python實(shí)現(xiàn)同一局域網(wǎng)下傳輸圖片
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)同一局域網(wǎng)下傳輸圖片,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-03-03Pytorch神經(jīng)網(wǎng)絡(luò)參數(shù)管理方法詳細(xì)講解
這篇文章主要介紹了Pytorch神經(jīng)網(wǎng)絡(luò)參數(shù)管理方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2023-05-05python上下文管理器協(xié)議的實(shí)現(xiàn)
這篇文章主要介紹了python上下文管理器協(xié)議的實(shí)現(xiàn),在python中所有實(shí)現(xiàn)了上下文管理器協(xié)議的對(duì)象 都可以用使用with操作,with啟動(dòng)了對(duì)象的上下文管理器2022-06-06python中的try except與R語言中的tryCatch異常解決
這篇文章主要為大家介紹了python中的try except與R語言中的tryCatch異常解決的方式及分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助2021-11-11python無法引用另一個(gè)文件夾的py文件問題及解決
這篇文章主要介紹了python無法引用另一個(gè)文件夾的py文件問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08