Как удалить повторяющийся номер в списке, а затем заменить его новым случайным числом - PullRequest
2 голосов
/ 09 апреля 2019

новичок в питоне. Я пытаюсь сделать что-то в стиле лотереи, где цикл 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 ]

2 голосов
/ 09 апреля 2019

Вместо использования 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 голос
/ 09 апреля 2019

На самом деле вы можете сделать это более простым способом, используя это непосредственно из модуля random ( Нет необходимости идти сложным путем и заново изобретать колесо - за исключением цели обучения ):

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

Пример вывода:

[29, 20, 26, 17, 37]

Пояснения:

  • range(1,39) для создания необходимого диапазона (т. Е. Вашего начального населения)
  • random.sample() Возвращает список длин уникальных элементов, выбранных из последовательности населения.
...