在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中的列表可以包含任何类型的对象-如果我正确理解了这个问题,lists的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"列表中,而不是每次迭代都创建一个新变量