63

0 から 100 までの 10 個の乱数の my_randoms という名前の「リスト」を作成します。

これは私がこれまでに持っているものです:

import random
my_randoms=[]
for i in range (10):
    my_randoms.append(random.randrange(1, 101, 1))
    print (my_randoms)

残念ながら、Python の出力は次のとおりです。

[34]
[34, 30]
[34, 30, 75]
[34, 30, 75, 27]
[34, 30, 75, 27, 8]
[34, 30, 75, 27, 8, 58]
[34, 30, 75, 27, 8, 58, 10]
[34, 30, 75, 27, 8, 58, 10, 1]
[34, 30, 75, 27, 8, 58, 10, 1, 59]
[34, 30, 75, 27, 8, 58, 10, 1, 59, 25]

私が要求したように 10 個の数字を生成しますが、一度に 1 つずつ生成します。私は何を間違っていますか?

4

10 に答える 10

93

random.sample1 回の呼び出しでリストを生成するために使用できます。

import random
my_randoms = random.sample(range(100), 10)

これにより、0 から 99 までの (包括的な) 範囲の数値が生成されます。1 から 100 が必要な場合は、これを使用できます (複雑なソリューションを指摘してくれた @martineau に感謝します)。

my_randoms = random.sample(range(1, 101), 10)
于 2013-05-20T17:45:30.360 に答える
50
import random
my_randoms = [random.randrange(1, 101, 1) for _ in range(10)]
于 2013-05-20T17:43:25.500 に答える
18

printステートメントのインデントを修正

import random

my_randoms=[]
for i in range (10):
    my_randoms.append(random.randrange(1,101,1))

print (my_randoms)
于 2013-05-20T17:42:14.080 に答える
12

これはかなり遅いですが、誰かがこれが役立つと思う場合に備えて.

リスト内包表記を使用できます。

rand = [random.randint(0, 100) for x in range(1, 11)]
print(rand)

出力:

[974, 440, 305, 102, 822, 128, 205, 362, 948, 751]

乾杯!

于 2019-01-14T20:21:23.120 に答える
0

randomここで言及されていないモジュール内の 1 つのランダム リスト ジェネレーターは次のとおりですrandom.choices

my_randoms = random.choices(range(0, 100), k=10)

みたいrandom.sampleですが差し替えあり。渡されるシーケンスは範囲である必要はありません。数字である必要さえありません。以下も同様に機能します。

my_randoms = random.choices(['a','b'], k=10)

random.choicesランタイムを比較すると、作成するリストのサイズに関係なく、ランダム リスト ジェネレーターの中で最も高速です。ただし、より大きなリスト/配列の場合、numpy オプションの方がはるかに高速です。たとえば、ランダムなリスト/配列を作成して pandas DataFrame 列に割り当てる場合は、使用np.random.randintが最速のオプションです。

ここに画像の説明を入力

上記のプロットを生成するために使用されるコード:

import perfplot
import numpy as np
import random

perfplot.show(
    setup=lambda n: n,
    kernels=[
        lambda n: [random.randint(0, n*2) for x in range(n)],
        lambda n: random.sample(range(0, n*2), k=n), 
        lambda n: [random.randrange(n*2) for i in range(n)],
        lambda n: random.choices(range(0, n*2), k=n), 
        lambda n: np.random.rand(n), 
        lambda n: np.random.randint(0, n*2, size=n),
        lambda n: np.random.choice(np.arange(n*2), size=n),
    ],
    labels=['random_randint', 'random_sample', 'random_randrange', 'random_choices', 
            'np_random_rand', 'np_random_randint', 'np_random_choice'],
    n_range=[2 ** k for k in range(17)],
    equality_check=None,
    xlabel='~n'
)
于 2022-02-09T22:14:40.053 に答える