如何使用def函数创建没有重复项的随机列表

时间:2019-04-12 21:09:02

标签: python

我需要使用def函数创建一个随机数字列表,没有重复项。

我尝试使用下面的两个函数,但它们最终都产生一个单一值

import random
def fill(nx, x, y):
    lx = []
    j = 0
    while (j < nx):
        r = random.randint(x, y)
        if r not in lx:
            lx.append(r)
            j = j + 1
            return lx


n = 25
a = 10
b = 50

myList = fill(n, a, b)
print(myList)

import random
def fill(nx, x, y):
    lx = []
    for j in range(nx):
        randNum = random.randint(x, y)
        if randNum not in lx:
            lx.append(randNum)
            return lx
n = 25
a = 10
b = 50

myList = fill(n, a, b)
print(myList)

它们都只将一个整数添加到列表中,我不知道如何使它添加所有25个需要的整数。如果我能在正确的方向上得到任何提示,那将是很大的帮助!也很抱歉,如果有任何第一次张贴的话,格式怪异。

2 个答案:

答案 0 :(得分:1)

您真的很亲近。 return语句与函数一起工作的方式是,一旦按下return语句,函数便会结束。由于return语句位于附加行之后,因此它将添加一个数字,然后退出该函数。您需要将返回语句转移到与for循环相同的行,以确保执行for循环,但要做到这一点还不错。

import random

def fill(nx, x, y):
    lx = []
    for j in range(nx):
        randNum = random.randint(x, y)
        if randNum not in lx:
            lx.append(randNum)
    return lx


n = 25
a = 10
b = 50

myList = fill(n, a, b)
print(myList)

输出:

[11, 29, 16, 33, 20, 22, 48, 47, 25, 28, 38, 30, 36, 40]

答案 1 :(得分:0)

您可以使用random.sample

import random
def fill(nx, x, y):
    return random.sample(range(x, y + 1), nx)

fill(25, 10, 50)的示例输出:

[25, 45, 35, 42, 24, 41, 43, 14, 36, 13, 46, 32, 29, 28, 22, 47, 39, 10, 30, 21, 33, 31, 17, 44, 34]