首页 > 解决方案 > 不断减少列表中的值,直到它们都为 0

问题描述

我有一个名为origin_list. 我想在这个列表中随机选择一个位置,然后将该位置元素的值减少 1,直到它们全部为 0。最快的方法是什么?

我在下面有一些相当不准确的伪代码来了解我正在尝试做什么

import numpy as np
origin_list = [120,240,201]
while all(origin_list)>=0:
    rand_int = np.random.randint(0,len(origin_list))
    origin_list[rand_int] = origin_list[rand_int]-1
    if origin_list[rand_int]==0:
    # Continue with reducing only the non-zero elements in the list

标签: pythonlistnumpyrandomwhile-loop

解决方案


你在这里并不真的需要 Numpy——因为你明确地想要循环值它不会增加太多。您可以只获取列表的索引列表并使用随机模块来选择一个。当该列表达到零时,删除索引。当索引列表为空时停止:

import random

origin_list = [5,4,7]
positions = list(range(len(origin_list)))
                 
while positions:
    p = random.choice(positions)  
 
    # do something
    
    origin_list[p] -= 1 
    if origin_list[p] == 0:
        positions.remove(p)  

print(origin_list)
# [0, 0, 0]    
   

效率可能主要取决于零件# do something


推荐阅读