python - 如何在python中概率性地填充列表?
问题描述
我想使用基本的 for 循环来填充 Python 中的值列表,但我希望以概率方式计算这些值,以便在(玩具)等式 1 中计算值的 p% 和 100-p%时间值在等式 2 中计算。
这是我到目前为止所得到的:
# generate list of random probabilities
p_list = np.random.uniform(low=0.0, high=1.0, size=(500,))
my_list = []
# loop through but where to put 'p'? append() should probably only appear once
for p in p_list:
calc1 = x*y # equation 1
calc2 = (x-y) # equation 2
my_list.append(calc1)
my_list.append(calc2)
解决方案
您已经生成了一个概率列表 - p_list
- 对应于my_list
您要生成的每个值。这样做的 Pythonic 方法是通过三元运算符和列表推导:
import random
my_list = [(x*y if random() < p else x-y) for p in p_list]
如果我们将其扩展为适当的for
循环:
my_list = []
for p in p_list:
if random() < p:
my_list.append(x*y)
else:
my_list.append(x-y)
如果我们想要更加pythonic,关于calc1
and calc2
,我们可以将它们变成 lambdas:
calc1 = lambda x,y: x*y
calc2 = lambda x,y: x-y
...
my_list = [calc1(x,y) if random() < p else calc2(x,y) for p in p_list]
或者,根据您的功能的方式x
和y
变化(假设它们不是静态的),您甚至可以分两步进行理解:
calc_list = [calc1 if random() < p else calc2 for p in p_list]
my_list = [calc(x,y) for calc in calc_list]
推荐阅读
- memory - 如何检测堆栈溢出?
- android - 从 Google Pay 中排除信用卡
- python - 需要为 matplotlib 安装 Pyside。Pyside 安装错误
- powershell - 您将如何创建一个脚本来比较两个系统用户的电子邮件地址
- arrays - Excel公式获取单元格中分隔值的最大长度
- java - 在 java android studion 中使用 Kotlin 库
- javascript - 无法检查空字符串和 null 的提示
- tfs - AzureDevops 代理未列出 VS2019 的功能
- c - 调整窗口大小后 SDL2 无法正确呈现
- codenameone - 为什么我的应用程序在 textField 聚焦时指向项目时会抛出 NPE?