新的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)
我最后得到一个较小的列表,这不是我想要的。
你可以使用list
而不是使用set,它具有不重复的特殊属性。这个想法是,如果你生成一个已经在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]
实际上你可以用更简单的方式做到这一点,直接从random
模块中做到这一点(不需要努力工作并重新发明轮子 - 除了学习目的):
import random
print(random.sample(range(1,39),5))
输出示例:
[29, 20, 26, 17, 37]
说明:
range(1,39)
生成你需要的范围(即你的初始人口)random.sample()
返回从群体序列中选择的k长度的唯一元素列表。