[英]Python: Random numbers into a list
创建一个名为 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 的 output 是这样的:
[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 个数字,但它一次生成一个。 我究竟做错了什么?
您可以使用random.sample
通过一次调用生成列表:
import random
my_randoms = random.sample(range(100), 10)
这会生成 0 到 99(含)范围内的数字。如果你想要 1 到 100,你可以使用这个(感谢@martineau 指出我的复杂解决方案):
my_randoms = random.sample(range(1, 101), 10)
import random
my_randoms = [random.randrange(1, 101, 1) for _ in range(10)]
修复print
语句的缩进
import random
my_randoms=[]
for i in range (10):
my_randoms.append(random.randrange(1,101,1))
print (my_randoms)
这已经很晚了,但以防万一有人发现这有帮助。
您可以使用列表理解。
rand = [random.randint(0, 100) for x in range(1, 11)]
print(rand)
输出:
[974, 440, 305, 102, 822, 128, 205, 362, 948, 751]
干杯!
这里我使用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]
xrange()
不适用于 3.x。
numpy.random.randint().tolist()
是指定区间内整数的一个很好的替代方法:
#[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]
你也有用于浮点数的np.random.uniform()
:
#[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]
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)
简单的解决方案:
indices=[]
for i in range(0,10):
n = random.randint(0,99)
indices.append(n)
此处未提及的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 列,那么使用np.random.randint
是最快的选择。
用于生成上述 plot 的代码:
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'
)
my_randoms = [randint(n1,n2) for x in range(listsize)]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.