Как получить случайные значения в списке, чтобы они были уникальными, по крайней мере, на определенное количество для каждого значения в списке в Python? - PullRequest
2 голосов
/ 13 апреля 2020

Так что я довольно новичок в python.

Я пытаюсь составить список с уникальными случайными значениями, которые отличаются от каждого другого случайного значения в списке по крайней мере на данный коэффициент, и что все ограничены двумя значениями.

Например, мне нужен список вроде:

randVals = [24, 418, 100, 286, 350]

, где каждое значение уникально, по крайней мере, с заданным коэффициентом 64 друг с другом.

Прямо сейчас мой код:

import random

x = [1, 2, 3, 4, 5]
randVals = [0] * (len(x) + 1)
factor = 64

print(randVals)

for i in range(len(randVals) - 1):
    randVals[i] = random.randint(10, 502)

    while randVals[i + 1] - factor <= randVals[i] <= randVals[i + 1] + factor:
        randVals[i] = random.randint(10, 502)
    print(randVals)

randVals.pop(len(x))
    print(randVals)

вывод:

[0, 0, 0, 0, 0, 0]
[494, 0, 0, 0, 0, 0]
[494, 144, 0, 0, 0, 0]
[494, 144, 489, 0, 0, 0]
[494, 144, 489, 342, 0, 0]
[494, 144, 489, 342, 361, 0]
[494, 144, 489, 342, 361]

Ответы [ 2 ]

1 голос
/ 13 апреля 2020

Во-первых, давайте удостоверимся, что я понимаю, что вы пытаетесь сделать: «Я пытаюсь составить список с уникальными случайными значениями, которые попарно отличаются как минимум по заданному коэффициенту и которые все ограничены двумя значениями». «Я пытаюсь сделать так, чтобы все значения находились в диапазоне от 10 до 502, в то время как все значения в списке находятся на расстоянии как минимум 64 единицы или более».

Затем, в соответствии с вашим подходом использования random.randint :

import random    # to generate random values

randVals = []    # and keep those values in a list
factor = 64      # values should differ by this factor
low = 10         # lower bound
high = 502       # upper bound

x = low     # start at lower bound

length = 8  # list should be of this length

if(high - factor*length)<low:
    print('Impossible to generate list with given parameters')
else:
    for i in range(length):

        # generate a random integer, leaving space
        # for enough others given the various requirements...
        randVal = random.randint(x, high-factor*(length-i))

        # add to list
        randVals.append(randVal)
        x = randVal + factor


    print(randVals)    

    # if we want, we can shuffle the list
    random.shuffle(randVals)
    print(randVals)
1 голос
/ 13 апреля 2020

Вы можете сделать следующее:

from random import sample


def random_list(spacing, k=5, lo=10, hi=502):
    return sample(list(range(lo, hi+1, spacing)), k=k)


result = random_list(64, k=5)

print(result)

Выход (случайный)

[10, 458, 394, 266, 330]

С list(range(lo, hi+1, spacing)) вы генерируете все числа между 10 и 502 с шагом 64, затем используйте образец , чтобы случайным образом выбрать k числа из этой совокупности.

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