确定被更改的随机列表的长度

时间:2018-01-22 04:26:33

标签: python python-3.x list random variable-assignment

我有一个列表在列表中随机访问,我要添加一个元素。 (请注意,元素必须随机插入列表中,即我不想在结尾插入或开始) 例如:

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的索引并使用该方法,但我正在寻找一种希望更多的Pythonic - 而且更短的方式。

2 个答案:

答案 0 :(得分:2)

您无需执行任何操作即可将对choicelist的更改反映在原始列表myList中。

choicelist = random.choice(myList)

在上面的陈述中,choicelist引用了myList中的一些随机列表,即choicelist不是random.choice创建的新列表。因此,您在choicelist中所做的任何更改都会反映在myList中的相应列表中。

答案 1 :(得分:0)

你可以分解函数中的每个操作:

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)