python - 不断减少列表中的值,直到它们都为 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
解决方案
你在这里并不真的需要 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
。
推荐阅读
- azure - Azure Datafactory 无法处理 blob 中的空 json 数组
- java - JScrollPane 覆盖 setHvalue
- java - 您如何指定/确定运行 fat jar 所需的最小 JDK?
- kubernetes - 由于 GKE 上的验证错误“需要输入 spec.tasks.image.volumes.secret”,无法运行 Apache CamelK IntegrationKit
- visual-studio-code - Visual Studio 代码中的运行设置文件
- json - 使用 Gson 从 JSON 字符串转换为数据类对象列表?
- flash - 使用外部接口以外的东西
- ios - 如何使用 XCTest 使用 #available 语句覆盖所有功能分支
- angular6 - 错误:模板解析错误:没有将“exportAs”设置为“bs-tooltip”的指令
- python - IndexingError:在 Pandas 中作为索引器提供的不可对齐布尔系列