第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

僅一次迭代即可從未知長度的序列中隨機(jī)選擇N個(gè)不同的項(xiàng)目

僅一次迭代即可從未知長度的序列中隨機(jī)選擇N個(gè)不同的項(xiàng)目

富國滬深 2019-10-19 15:50:16
我正在嘗試編寫一種算法,該算法將從序列中隨機(jī)選擇N個(gè)不同的項(xiàng),而無需事先知道序列的大小,并且在一個(gè)以上的序列上進(jìn)行多次迭代的開銷很大。例如,序列的元素可能是一個(gè)巨大文件的行。當(dāng)N = 1(即“從一個(gè)巨大的序列中隨機(jī)挑選一個(gè)元素”)時(shí),我找到了一種解決方案:import randomitems = range(1, 10) # Imagine this is a huge sequence of unknown lengthcount = 1selected = Nonefor item in items:    if random.random() * count < 1:        selected = item    count += 1但是,對于其他N值(例如N = 3),我該如何實(shí)現(xiàn)相同的目標(biāo)呢?
查看完整描述

3 回答

?
月關(guān)寶盒

TA貢獻(xiàn)1772條經(jīng)驗(yàn) 獲得超5個(gè)贊

使用儲(chǔ)層取樣。這是一個(gè)非常簡單的算法,適用于任何算法N。


這是一個(gè)Python實(shí)現(xiàn),這是另一個(gè)。




查看完整回答
反對 回復(fù) 2019-10-19
?
慕無忌1623718

TA貢獻(xiàn)1744條經(jīng)驗(yàn) 獲得超4個(gè)贊

如果您的序列足夠短,以至于可以將其讀入內(nèi)存并對其進(jìn)行隨機(jī)排序,那么一種簡單的方法就是使用random.shuffle:


import random

arr=[1,2,3,4]


# In-place shuffle

random.shuffle(arr)


# Take the first 2 elements of the now randomized array

print arr[0:2]

[1, 3]

根據(jù)序列的類型,您可能需要通過調(diào)用將其轉(zhuǎn)換為列表list(your_sequence),但是不管序列中對象的類型如何,此方法都可以工作。


自然,如果您無法將序列適合內(nèi)存,或者此方法對內(nèi)存或CPU的要求過高,則需要使用其他解決方案。


查看完整回答
反對 回復(fù) 2019-10-19
?
茅侃侃

TA貢獻(xiàn)1842條經(jīng)驗(yàn) 獲得超22個(gè)贊


import random


my_list = [1, 2, 3, 4, 5]

num_selections = 2


new_list = random.sample(my_list, num_selections)


# To preserve the order of the list, you could do:

randIndex = random.sample(range(len(my_list)), n_selections)

randIndex.sort()

new_list = [my_list[i] for i in randIndex]


查看完整回答
反對 回復(fù) 2019-10-19
  • 3 回答
  • 0 關(guān)注
  • 615 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)