2017-01-07 2 views
2

Я пишу алгоритм ранжирования, и я бы хотел добавить фактор случайности.Как создать взвешенный случайный список?

я генерации список из 10 пунктов, где каждый элемент имеет значение от 1 до 10:

l = [random.randint(1,10) for num in range(1, 11)] 

Я бегу этот код около 400 раз и хранения большого списка в БД.

Я хотел бы добавить к нему вероятность, поэтому 70% времени генерирует номера радиометра от 1 до 5 для первых 5 предметов и 5 до 10 для последних 5 предметов.

И 30% времени он остается случайным без какой-либо вероятности (нормальный режим).

Как я могу достичь этого, используя python и его случайный модуль?

Edit: Некоторые считают, что это может быть дубликатом this question, однако это не так, потому что я не ищу, чтобы выбрать элементы, основанные на probabiltiy, вместо этого я хотел бы быть распределены в зависимости от их веса.

+0

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

ответ

3

Ниже будет генерировать хотел случайный список:

import random 


def next_random_list(): 
    # With 70% probability 
    if random.randint(1, 10) <= 7: 
     # Generate 5 random elements from 1 to 5 
     a = [random.randint(1, 5) for _ in range(5)] 

     # Generate 5 random elements from 5 to 10 
     b = [random.randint(5, 10) for _ in range(5)] 

     # Concatenate them 
     return a + b 
    else: 
     # Return just a random list of 10 numbers from 1 to 10 
     [random.randint(1, 10) for _ in range(10)] 

и вы можете запустить его в 400 раз:

lists = [next_random_list() for i in range(400)] 
+0

Спасибо, Хотя это не было включено в исходный вопрос, как я могу убедиться, что я никогда не получу одинаковое число в списке? –

+1

@AnisSouames Посмотрите на 'random.sample', например. 'random.sample (диапазон (5,10), 5)' для второй половины. –

Смежные вопросы