Определение длины изменяемого случайного списка

У меня есть список случайного доступа в списке, к которому я добавляю элемент. (обратите внимание, что элемент должен быть вставлен случайным образом внутри списка, т.е. я не хочу вставлять в конце или в начале) Например:

myList = [[0, 1, 4, 7],[0, 3, 2, 7]]
toinsert = [5, 6]

for item in toinsert:
    random.choice(myList).insert(random.randint(1,len(`the list that got chosen`)-2), item)

Я пытался использовать

choicelist = random.choice(myList)
choicelist.insert(randint(1,len(choicelist)))

но потом я не уверен, как вернуть его туда, где был первоначальный список - учитывая, что это случайный список.

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

2 ответа

Решение

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

choicelist = random.choice(myList)

В приведенном выше заявлении, choicelist ссылка на какой-то случайный список внутри myListт.е. choicelist это не новый список, созданный random.choice, Так что любые изменения, которые вы делаете в choicelist будет отражено в соответствующем списке в myList,

Вы можете разбить каждую операцию на функции:

import random

def insert_at_random_place(elt, seq):
    insert_index = random.randrange(len(seq))
    seq.insert(insert_index, elt)    # the sequence is mutated, there is no need to return it

def insert_elements(elements, seq_of_seq):
    chosen_seq = random.choice(seq_of_seq)
    for elt in elements:
        insert_at_random_place(elt, chosen_seq)
    # the sequence is mutated, there is no need to return it

myList = [[0, 1, 4, 7],[0, 3, 2, 7]]
toinsert = [5, 6]

insert_elements(toinsert, myList)
Другие вопросы по тегам