【发布时间】:2020-06-15 19:47:04
【问题描述】:
我目前正在尝试随机化一个 0 和 1 列表,它应该给出一个随机顺序的 0 和具有以下约束的 1:
1/3 的项必须为 1(分别为 2/3 为 0)
连续出现的 1 不能超过两个
- 连续出现的零不得超过四个
我已经研究了一个选项,但结果并不完全是我需要的。这是我的选择:
for prevItem, nextItem in enumerate(WordV[: -1]):
if nextItem == WordV[prevItem+1] and WordV[prevItem+1] == WordV[prevItem+2] and nextItem ==1:
WordV[prevItem+2] = 0
if nextItem == WordV[prevItem+1] and WordV[prevItem+1] == WordV[prevItem+2] and WordV[prevItem+2] == WordV[prevItem+3] and WordV[prevItem+3] == WordV[prevItem+4] and nextItem == 0:
WordV[prevItem+2] = 1
# Check the number of ones & zeros
print(WordV)
ones= WordV.count(1)
zeros= WordV.count(0)
print(ones, zeros)
目前,1 和 0 的数量加起来不等于 1/3 到 2/3,因为约束替换了数字。 WordV 列表是一个包含 24 个 1 和 48 个 0 的列表,随机打乱(使用 random.shuffle(WordV))。
有没有更聪明(更正确)的方式将约束集成到代码中?
【问题讨论】:
-
需要快速吗?
标签: python python-3.x list random shuffle