Python:替换20%的列表

Mar*_*ark 0 python random list

我试图在python中随机替换20%的列表:

ls = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
ls = [1, 2, NULL, 4, 5, 6, NULL, 8, 9, 10]
ls = [1, 2, 82, 4, 5, 6, 28, 8, 9, 10]
Run Code Online (Sandbox Code Playgroud)

至今

while n <= len(ls)/5
    ls[randint(0, 9)]=randint(1, 100)
    n += 1
Run Code Online (Sandbox Code Playgroud)

但它有很大的机会在一次运行中多次删除和替换相同的条目.

cs9*_*s95 5

假设ls可能是任何东西,我建议生成一个索引列表,对应于ls.然后,您可以用来random.sample获取这些指数的20%,然后仅改变它们.

来自文档:

返回从总体序列中选择的独特元素的长度列表.用于无需更换的随机抽样.

In [816]: for _i in random.sample(range(len(ls)), len(ls) // 5):
     ...:     ls[_i] = random.randint(1, 100)
     ...:     

In [817]: ls
Out[817]: [1, 92, 3, 4, 5, 6, 7, 8, 75, 10]
Run Code Online (Sandbox Code Playgroud)