Определение длины изменяемого случайного списка
У меня есть список случайного доступа в списке, к которому я добавляю элемент. (обратите внимание, что элемент должен быть вставлен случайным образом внутри списка, т.е. я не хочу вставлять в конце или в начале) Например:
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)