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

时间:2019-04-09 01:00:56

标签: python loops random numbers generator

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)

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

2 个答案:

答案 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个长度的列表。