不同洗牌的程度,我用两个建筑方案,可视化编程插件(蚂蚱犀牛和迪纳摩的Revit中 - 对于那些知道/有兴趣)使用随机模块蟒蛇
蝈蝈包含一个名为“抖动功能'这将洗刷一个列表,但是它有一个从0.0到1.0的输入来控制洗牌的程度--0.0导致没有洗牌1.0会产生一个完整的洗牌。
第二个程序(Dynamo)不包含此功能。它包含一个shuffle模块(它包含一个种子值),但它是一个完整的随机洗牌。
最终的目标是要生产出一系列固体和玻璃面板的,但以产生轻微的随机效应(但避免大结块固体和釉面元件 - 因此我想“光洗牌”)
我已经编写了一个代码,用于计算所需的玻璃(真)值和实值(假)值的数量,然后根据项目数量和指定的百分比均匀分配True和False值。
我已经签出了随机模块参考,但我不熟悉所述的各种分布。
如果现有的功能可以实现这一点,有人可以帮助或指出我的方向是正确的。
(我已经加入对错交替,以弥补列表中的项目的正确数量略有被骗 - 项目list3是最终名单,列表2包含真正falses的重复模块)
非常感谢
import math
import random
percent = 30
items = 42
def remainder():
remain = items % len(list2)
list3.append(True)
remain -= 1
while remain > 0 :
list3.append(False)
remain -= 1
return list3
#find module of repeating True and False values
list1 = ([True] + [False] * int((100/percent)-1))
#multiply this list to nearest multiple based on len(items)
list2 = list1 * int(items/(100/percent))
# make a copy of list2
list3 = list2[:]
#add alternating true and false to match len(list3) to len(items)
remainder()
#an example of a completely shuffled list - which is not desired
shuffled = random.sample(list3, k = len(list3))
Python的随机模块有一个'shuffle'方法,所以实现一个完整的shuffle作为一个样本是毫无意义的。就“抖动”而言 - 或许与其邻居进行随机交换一定次数,这将导致原始顺序扩散。 –