63

创建一个名为 my_randoms 的“列表”,其中包含 0 到 100 之间的 10 个随机数。

这是我到目前为止所拥有的:

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 个数字,但它一次生成一个。我究竟做错了什么?

4

10 回答 10

93

您可以使用random.sample一次调用生成列表:

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 回答
8

这里我使用sample方法生成0到100之间的10个随机数。

注意:我使用的是 Python 3 的range函数(不是xrange)。

import random

print(random.sample(range(0, 100), 10))

输出被放入列表中

[11, 72, 64, 65, 16, 94, 29, 79, 76, 27]
于 2018-04-14T22:42:34.300 回答
4

xrange() will not work for 3.x.

numpy.random.randint().tolist() is a great alternative for integers in a specified interval:

 #[In]:
import numpy as np
np.random.seed(123) #option for reproducibility
np.random.randint(low=0, high=100, size=10).tolist()

#[Out:]

[66, 92, 98, 17, 83, 57, 86, 97, 96, 47]

You also have np.random.uniform() for floats:

#[In]:
np.random.uniform(low=0, high=100, size=10).tolist()

#[Out]:
[69.64691855978616,
28.613933495037948,
22.68514535642031,
55.13147690828912,
71.94689697855631,
42.3106460124461,
98.07641983846155,
68.48297385848633,
48.09319014843609,
39.211751819415056]
于 2019-09-30T09:57:09.810 回答
1
import random

a=[]
n=int(input("Enter number of elements:"))

for j in range(n):
       a.append(random.randint(1,20))

print('Randomised list is: ',a)
于 2017-08-03T04:28:19.843 回答
0

简单的解决方案:

indices=[]
for i in range(0,10):
  n = random.randint(0,99)
  indices.append(n)
于 2021-03-23T14:33:18.573 回答
0

random此处未提及的模块中的一个随机列表生成器是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 列,那么 usingnp.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 回答
-3
my_randoms = [randint(n1,n2) for x in range(listsize)]
于 2017-08-04T14:22:17.147 回答