我是Python的新手,我正在尝试生成一个4个随机数的列表,该整数的整数在1到9之间。该列表不得包含重复的整数。
我遇到的问题是该程序每次都不会输出正好4个数字。有时它会生成3个数字或2个数字,但我不知道如何解决它。
我的代码:
import random
lst = []
for i in range(5):
r = random.randint(1,9)
if r not in lst: lst.append(r)
print(lst)
有没有没有random.sample的方法吗?这段代码是学校分配的一部分,我的老师不希望我们使用random.sample或random.shuffle函数。
答案 0 :(得分:4)
您的代码会生成5个随机数,但是它们不一定是唯一的。如果生成了2
,而您在2
中已经有list
,则您无需附加它,而实际上应该生成一个尚未使用的替代数字。>
您可以使用while
循环来测试是否已经有足够的数字:
result = [] # best not to use list as a variable name!
while len(result) < 5:
digit = random.randint(1, 9)
if digit not in result:
result.append(digit)
但是,这比实际需要的工作还要多,并且从理论上讲可能要花很多时间(因为相同4个初始数字的数百万次重复仍然被认为是随机的)。标准库为此任务提供了更好的方法。
相反,您可以使用random.sample()
从range()
对象中获取5个唯一数字:
result = random.sample(range(1, 10), 5)
保证从该范围中获取5个值,且不重复数字,并且分5步进行。
答案 1 :(得分:1)
答案 2 :(得分:1)
您的问题是,您要迭代5次,随机范围是1-9。这意味着您有大约50/50的机会获得重复整数,这可以防止您的条件被附加到列表中。
这将为您提供更好的服务:
def newRunLst():
lst = []
while len(lst) < 4:
r = random.randint(1,9)
if r not in lst: lst.append(r)
print lst
答案 3 :(得分:0)
如果需要的随机列表不是太小(与总列表相比)那么可以
(pd.DataFrame([(i,np.random.rand()) for i in range(10)]).sort_values(by=1))[0][:5].sort_index()