我需要从1-500生成100个数字并将其附加到空列表,但我不知道如何修复我的代码。有一个<'none'>在我打印它的最后。当我使用len函数来计算a时,它只会说1,所以它并没有真正添加100个数字。
a = []
import random
print("original: \n")
for x in range(100):
nums = random.randint(1,501)
b = print(nums, end=" ")
a.append(b)
print(a)
print(len(a))
答案 0 :(得分:3)
我相信这就是你要找的东西。 print
不会返回任何内容,您无法将print
添加到列表中。事实上,为什么你需要2个变量就不清楚了。
import random
a = []
for x in range(100):
a.append(random.randint(1,501))
print(' '.join(map(str, a)))
print(len(a))
避免循环的替代解决方案使用numpy
库:
import numpy as np
a = np.random.randint(1, 501, 100)
如果表现有问题;例如对于许多大型随机列表;这里是基准测试与使用random
的有效基于列表的解决方案:
import numpy as np
import random
%timeit np.random.randint(1, 501, 100) # 5.97 µs
%timeit random.choices(range(1, 501), k=100) # 66.3 µs
答案 1 :(得分:3)
在python-3.6上,您可以使用random.choices
,并通过此函数的返回值扩展a
:
a.extend(random.choices(range(1, 501), k=100))
虽然,如果您从一个空列表开始并且在此步骤之前没有添加任何内容,那么将a
初始化为
a = random.choices(range(1, 501), k=100)
之前没有进行任何空列表初始化。
如果您使用的是旧版本的python,请在循环中使用random.randint
。
a.extend(random.randint(1, 500) for _ in range(100))
或者,
a = [random.randint(1, 500) for _ in range(100)]
或者,
a = []
for _ in range(100):
a.append(random.randint(1, 500))
从文档中,我认为上限是包容性的(因此,500
)。
答案 2 :(得分:3)
nums = random.randint(1,501)
这会返回单个随机数,因此复数名称“nums”在这里会产生误导。
b = print(nums, end=" ")
print
函数打印一些东西,在这种情况下是生成的数字,但它本身没有返回值。因此b
将是None
。
a.append(b)
这可以理论上将生成的数字附加到列表中。但是,正如我们所建立的那样,b
为None
,因此会将None
附加到列表中。此外,这一行在循环之外,所以这只会运行一次,并且只会添加100个数字中的一个。
你应该做这样的事情:
a = []
for x in range(100):
num = random.randint(1,501)
a.append(num)
print(a)
print(len(a))
您也可以在此处使用列表推导,以简化:
a = [random.randint(1, 501) for x in range(100)]
print(a)
print(len(a))
这将有相同的结果。
您还可以使用random.choices
,它本身已经能够生成具有指定大小的随机数列表。所以这也可行:
a = random.choices(range(1, 501), k=100)
答案 3 :(得分:0)
你的代码是正确的只是一个小错误,你没有缩进a.append(nums)
,所以它超出了for
循环的范围。试试这个代码:)。
import random
a = []
print("original: \n")
for x in range(100):
nums = random.randint(1,501)
print(nums, end=" ")
a.append(nums)
print(a)
print(len(a))
答案 4 :(得分:0)