在Python中存储多个数组

2024-05-18 10:08:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编写一个程序来模拟像盖洛普或拉斯穆森这样的实际投票数据公司每天发布:www.Gallup.com和www.rassmussenreports.com

我用的是蛮力法,计算机生成一些随机的每日投票数据,然后计算三天的平均值,看看随机数据的平均值是否与民意测验者的数字相匹配。(大多数公司的民意调查数据是三天平均值)

目前,它在一次迭代中运行良好,但我的目标是让它生成与平均轮询数据匹配的最常见模拟。然后我可以将任何地方的代码从1个迭代更改为1000个迭代。

这是我的问题。在测试结束时,我在一个变量中有一个数组,如下所示:

[40.1, 39.4, 56.7, 60.0, 20.0 ..... 19.0]

程序当前为每个正确的模拟生成一个数组。我可以将每个数组存储在一个单独的变量中,但是我必须有一个程序,它可以根据我请求的迭代次数生成1到1000个变量!?

我该如何避免?我知道有一种智能的方法可以做到这一点,它不需要程序生成变量来存储数组,这取决于我需要多少模拟。

麦凯恩的代码测试:

 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变量的情况下重复?


Tags: 数据代码test程序comwww公司random
3条回答

你是说要这么做吗?

>>> a = [ ['a', 'b'], ['c', 'd'] ]
>>> a[1]
['c', 'd']
>>> a[1][1]
'd'

想要这个吗?

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列表列表。

我改变了什么:

  • 使用list comprehension来构建数据,而不是for循环
  • 使用random.randint获取随机整数
  • 使用slicessum计算前三项的平均值
  • (回答实际问题:-)将结果放入列表mcworks,而不是为每次迭代创建一个新变量

python中的列表可以包含任何类型的对象——如果我正确地理解了这个问题,一个listlist可以完成这个任务吗?类似的东西(假设您有一个函数generate_poll_data(),它创建您的数据:

data = []

for in xrange(num_iterations):
    data.append(generate_poll_data())

然后,data[n]将是第(n-1)次运行的数据列表。

相关问题 更多 >