python新手。我正在尝试制作彩票样式的东西,其中for循环将5
随机数附加到列表中。
让我们说到目前为止的列表是nList = [1,2,3,4]
,最后一次迭代也恰好是4
。
我希望代码删除应该在最后一个索引中的多余4
,并用一个全新的随机数替换它,该随机数不重复列表中的其余任何数字。我似乎无法全神贯注。
我尝试使用nList.pop()
,解决了删除重复项的问题,我只是不知道如何添加新的随机数。
import random
nList = []
random.seed()
for x in range(5):
n = random.randint(1,39)
for item in nList:
if n == item:
nList.pop()
else:
nList.append(n)
print(nList)
我只得到了一个较小的列表,这不是我想要的。
答案 0 :(得分:2)
可以使用set来代替list
,它具有没有重复项的特殊属性。这个想法是,如果生成的数字已经在set
内部,则只需重新滚动,直到获得不在set
中的数字。通过使用集合,还具有拥有O(1)
查找时间的优点。
import random
nList = set()
for x in range(5):
n = random.randint(1,39)
while n in nList:
n = random.randint(1,39)
nList.add(n)
print(list(nList))
示例输出
[24,25,11,12,15]
答案 1 :(得分:1)
实际上,您可以通过更简单的方式做到这一点,可以直接在random
模块中使用它(无需费劲地重新发明轮子-除了学习目的) :
import random
print(random.sample(range(1,39),5))
输出示例:
[29, 20, 26, 17, 37]
说明:
range(1,39)
生成您需要的范围(即您的初始人口)random.sample()
返回从填充序列中选择的唯一元素的k个长度的列表。