Как использовать функцию def для создания случайного списка без дубликатов [duplicate]

1

Мне нужно использовать функцию 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 нуждающихся в нем. Если бы я мог получить какие-либо подсказки в правильном направлении, это было бы очень полезно! а также извините за странное форматирование, если есть первый постер.

  • 0
    return lx имеет слишком большой отступ, так что цикл заканчивается после добавления 1 значения в lx . Он должен иметь отступ в той же строке, что и ваш оператор while.
  • 0
    Кроме того, то, что вы называете «функцией def», обычно просто называется «функцией». Другие виды функций, такие как лямбды, сравнительно необычны, и на них ссылаются под другим именем.
Показать ещё 2 комментария
Теги:

2 ответа

0

Вы были очень близки Оператор 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]
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]

Ещё вопросы

Сообщество Overcoder
Наверх
Меню