在Python中存储多个数组
时间:2020-03-05 18:52:25 来源:igfitidea点击:
我正在编写一个程序来模拟像盖洛普(Gallup)或者拉斯穆森(Rasmussen)这样每天发布的实际民意测验数据公司:www.gallup.com和www.rassmussenreports.com
我使用的是蛮力方法,其中计算机会生成一些随机的每日轮询数据,然后计算三天的平均值,以查看随机数据的平均值是否与民意测验数字匹配。 (大多数公司的投票数是三天的平均值)
目前,它可以很好地进行一次迭代,但是我的目标是让它产生与平均轮询数据匹配的最通用的模拟。然后,我可以将代码的更改范围从1迭代到1000。
这是我的问题。在测试结束时,我在单个变量中有一个数组,看起来像这样:
[40.1, 39.4, 56.7, 60.0, 20.0 ..... 19.0]
该程序当前为每个正确的模拟生成一个数组。我可以将每个数组存储在一个变量中,但是然后我必须有一个程序,该程序可以生成1到1000个变量,具体取决于我请求的迭代次数!
如何避免这种情况?我知道有一种聪明的方法,不需要程序根据我想要的模拟次数来生成变量来存储数组。
McCain的代码测试:
test = [] while x < 5: test = round(100*random.random()) mctest.append(test) x = x +1 mctestavg = (mctest[0] + mctest[1] + mctest[2])/3 #mcavg is real data if mctestavg == mcavg[2]: mcwork = mctest
如何重复而不创建多个mcwork var?
解决方案
回答
我们是在谈论这样做吗?
>>> a = [ ['a', 'b'], ['c', 'd'] ] >>> a[1] ['c', 'd'] >>> a[1][1] 'd'
回答
python中的列表可以包含任何类型的对象-如果我正确理解了这个问题,list
s的list
可以完成工作吗?像这样的东西(假设我们有一个函数generate_poll_data()
,它会创建数据:
data = [] for in xrange(num_iterations): data.append(generate_poll_data())
然后," data [n]"将是第(n-1)次运行的数据列表。
回答
由于我们在考虑变量,因此我们可能更喜欢使用字典而不是列表:
data = {} data['a'] = [generate_poll_data()] data['b'] = [generate_poll_data()]
等等。
回答
我会强烈考虑使用NumPy做到这一点。我们将获得可以快速,轻松地处理的高效N维数组。
回答
这样的事情会起作用吗?
from random import randint mcworks = [] for n in xrange(NUM_ITERATIONS): mctest = [randint(0, 100) for i in xrange(5)] if sum(mctest[:3])/3 == mcavg[2]: mcworks.append(mctest) # mcavg is real data
最后,剩下的是有效的" mctest"列表列表。
我改变了什么:
- 使用列表推导来构建数据,而不是for循环
- 使用
random.randint
获取随机整数 - 使用slice和sum来计算前三个项目的平均值
- (要回答实际问题:-),将结果放在" mcworks"列表中,而不是每次迭代都创建一个新变量