Замена индексов в списке без повторения позиций индекса - PullRequest
0 голосов
/ 18 мая 2018

Итак, у меня есть список из 10 0.

[0,0,0,0,0,0,0,0,0,0].

Я должен вставить в список 4 случайные единицы.

[0,1,0,0,0,1,0,1,1,0].

Как вставить единицы без повторенияиндексы.

def init_positions(n_cells, n_veh):
    lst = [0] * n_cells
    for i in range(n_veh):
        newL = random.randint(0, n_cells)
        lst[newL] = 1
    return lst

position = init_positions(10,4)
print(position)

1 Ответ

0 голосов
/ 18 мая 2018

Вы можете использовать random.sample на range для выбора n различных индексов.

import random

lst = [0] * 10

def insert_ones(n, lst):
    for x in random.sample(range(len(lst)), n):
        lst[x] = 1

insert_ones(4, lst)  # [1, 0, 0, 1, 0, 0, 0, 1, 1, 0]

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

import random

def init_positions(n_cells, n_veh):
    indices = set(random.sample(range(n_cells), n_veh))
    return [1 if x in indices else 0 for x in range(n_cells)]

init_positions(10, 4)  # [0, 1, 1, 1, 0, 0, 0, 0, 0, 1]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...