0
val = long(raw_input("Please enter the maximum value of the range:")) + 1
start_time = time.time()
numbers = range(0, val)
shuffle(numbers)

非常に大きな入力でこれを機能させる簡単な方法が見つかりません - 誰でも助けてくれますか?

このような質問を見ましたが、シャッフルで機能する方法で説明されている範囲関数を実装できませんでした。ありがとう。

4

3 に答える 3

4

[0, n)メモリ効率の良い方法で範囲のランダムな順列を取得します。あなたが使用することができますnumpy.random.permutation()

import numpy as np

numbers = np.random.permutation(n)

たとえば、範囲kからランダムな値を取得する場合など、範囲からの値のごく一部のみが必要な場合[0, n):

import random
from functools import partial

def sample(n, k):
    # assume n is much larger than k
    randbelow = partial(random.randrange, n)
    # from random.py
    result = [None] * k
    selected = set()
    selected_add = selected.add
    for i in range(k):
        j = randbelow()
        while j in selected:
            j = randbelow()
        selected_add(j)
        result[i] = j
    return result


print(sample(10**100, 10))
于 2013-05-04T23:10:26.117 に答える