Как удалить элемент, который появляется в списке более одного раза, без изменения длины списка (без наборов) - PullRequest
0 голосов
/ 03 ноября 2018

Я много раз искал, и кажется, что наборы - лучший вариант, однако для этого задания я считаю, что это не разрешено. Итак, в основном я создал пустой список, и он генерирует список длиной 5 элементов с номерами от 1 до 9 внутри. Но все числа должны появиться один раз в списке. Как я могу это сделать?

    import random
    lis = []
    for i in range(1,6):
        x = random.randint(1,9)
        lis.append(x)

Я пробовал,

    if x not in lis:
    lis.append(x)

Но длина моего списка постоянно менялась.

Ответы [ 2 ]

0 голосов
/ 03 ноября 2018

Вы могли бы сделать это, как сказал Сакул, с помощью цикла while, но вот еще один интересный вариант, хотя это может быть запрещено вашим назначением.

import random
lis = random.sample(range(1,10),5)
0 голосов
/ 03 ноября 2018

IIUC, Вы можете использовать while вместе с оператором if, который вы первоначально пытались:

import random
lis = []
while len(lis) < 5:
    x = random.randint(1,9)
    if x not in lis:
        lis.append(x)

>>> lis
[2, 8, 1, 5, 3]

Но если вы хотите быть хитрым, вы можете сделать:

x = list(range(1,10))
random.shuffle(x)
>>> x[:5]
[2, 1, 4, 3, 7]

Или

import numpy as np

>>> np.random.choice(range(1,10),5,replace=False)
array([7, 5, 3, 6, 4])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...