python生成不重復隨機數(shù)和對list亂序的解決方法
andom.sample(list, n)即是從list中隨機選取n個不同的元素
# -*- coding: utf-8 -*- import random # 從一個list中隨機挑選5個 list = [12, 23, 13, 14, 78, 234, 123, 12345] randomlist = random.sample(list, 5) print randomlist # 在range(10)中隨機生成5個不重復的數(shù),可以作為隨機下標集合,然后到list中取數(shù) len = list.__len__() indexList = range(len) randomIndex = random.sample(indexList, 5) for i in randomIndex: print "下標為%d" % i print list[i]
對list進行洗牌,亂序排序,random.shuffle(list),注意原來的list會被改變
# -*- coding: utf-8 -*- import random # 對list洗牌,在原list上做改變 list = range(10) print list random.shuffle(list) print "隨機排序列表 : ", list
關于生成隨機的不重復數(shù),我被面試過兩次,有一次的應用場景是抽獎。
我當時提出的解決方案是:將生成的隨機數(shù)(數(shù)組的隨機下標)放在一個數(shù)組中,每次對新生成的隨機數(shù)首先判斷是否已經(jīng)存在,如果不存在就加入這個數(shù)組,如果存在就重新生成隨機數(shù),直到這個數(shù)組中的元素個數(shù)到達一個特定值,然后拿著這個隨機下標數(shù)組到原數(shù)組中去取元素。面試官問我時間復雜度問我是多少,我說O(n^2),面試官問我有沒有改進方案,我想了一會沒想出來。
回到宿舍后舍友說,你可以每次對選中的元素和最后元素交換以下,下一次生成隨機數(shù)的時候就在前n-1個元素中生成,這樣每次只要交換一次元素,就不用去那個數(shù)組中判斷當前下標是否已經(jīng)被生成過一次,時間復雜度變成O(n),不由佩服。
Java中提供了list.contains(ele)函數(shù),可以直接判斷指定容器中是否存在某個元素,這樣就不用寫二重循環(huán)了,但是時間復雜度仍然是O(n^2)
不過今天看了一下python中的sample函數(shù)(隨機選取種子點)直接就能達到我要的結果,下次再寫抽獎函數(shù)一行代碼就搞定了。
以上這篇python生成不重復隨機數(shù)和對list亂序的解決方法就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Python 批量驗證和添加手機號碼為企業(yè)微信聯(lián)系人
你是否也有過需要添加很多微信好友的時候,一個個輸入添加太麻煩了,本篇文章手把手教你用Python替我們完成這繁瑣的操作,大家可以在過程中查缺補漏,看看自己掌握程度怎么樣2021-10-10
python讀取并定位excel數(shù)據(jù)坐標系詳解
這篇文章主要介紹了python讀取并定位excel數(shù)據(jù)坐標系詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2019-06-06
利用Python產(chǎn)生加密表和解密表的實現(xiàn)方法
這篇文章主要介紹了利用Python產(chǎn)生加密表和解密表的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-10-10
python中json.dumps和json.dump區(qū)別
json.dumps將Python對象序列化為JSON字符串,json.dump直接將Python對象序列化寫入文件,本文就來介紹一下兩個的使用及區(qū)別,具有一定的參考價值,感興趣的可以了解一下2024-12-12
keras的siamese(孿生網(wǎng)絡)實現(xiàn)案例
這篇文章主要介紹了keras的siamese(孿生網(wǎng)絡)實現(xiàn)案例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-06-06
解決pycharm每次新建項目都要重新安裝一些第三方庫的問題
今天小編就為大家分享一篇解決pycharm每次新建項目都要重新安裝一些第三方庫的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-01-01

