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

Я пытаюсь создать функцию, которая случайным образом выбирает элементы из списка и создает новый список со случайным порядком элементов при каждом запуске.Я полагаю, что я выполнил основную часть этого, однако мне не хватает способа убедиться, что при выполнении моей функции она всегда генерирует только один из каждого элемента в списке без дубликатов (исключая преднамеренные дубликаты, которые я сделал в своем списке,т.е. я хочу список из 16 элементов с 2 c1, c2, c3 и т. д., но не с чем-то вроде 3 c1, 1 c2, 5 c3).

def random_assignment():
list_of_pairs = [c1, c1, c2, c2, c3, c3, c4, c4, c5, c5, c6, c6, c7, c7, c8, c8]
random_list = list(random.choice(list_of_pairs))
keep_generating = True
while keep_generating:
    return random_list
if len(random_list) == 16:
    keep_generating = False

Ответы [ 2 ]

0 голосов
/ 16 сентября 2018
from random import randint

list_of_pairs = [i for i in range(8)]*2
lista = []
for _ in list_of_pairs[:]:
    lista.append(list_of_pairs.pop(randint(0,len(list_of_pairs)-1)))

есть причина и менее "правильный" путь - это в общем плохая практика

[list_of_pairs.pop(randint(0,len(list_of_pairs)-1)) for _ in list_of_pairs[:]]
0 голосов
/ 16 сентября 2018

Вы можете использовать функцию shuffle из случайного модуля следующим образом, чтобы получить уникальный набор случайных целых чисел:

import random

my_list = list(xrange(1,100)) # list of integers from 1 to 99
                          # adjust this boundaries to fit your needs
random.shuffle(my_list)
print my_list # <- List of unique random numbers

Обратите внимание, что метод shuffle не возвращает никакого списка, как можно было ожидать, он только перетасовывает список, переданный по ссылке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...