如何删除列表中的重复数字,然后替换为新的随机数

问题描述 投票:1回答:2

新的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)

我最后得到一个较小的列表,这不是我想要的。

python loops random numbers generator
2个回答
2
投票

你可以使用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]


1
投票

实际上你可以用更简单的方式做到这一点,直接从random模块中做到这一点(不需要努力工作并重新发明轮子 - 除了学习目的):

import random
print(random.sample(range(1,39),5))

输出示例:

[29, 20, 26, 17, 37]

说明:

  • range(1,39)生成你需要的范围(即你的初始人口)
  • random.sample()返回从群体序列中选择的k长度的唯一元素列表。
© www.soinside.com 2019 - 2024. All rights reserved.