我正在写一程序模拟的实际投票的数据这样的公司Gallup或拉斯穆森发布的每日: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 vars?

有帮助吗?

解决方案

会这样的工作?

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 名单。

我改变:

  • 用一种 列表理解 建立数据,而不是一个循环
  • 使用 random.randint 得到的随机的整数
  • 使用 切片sum 计算平均水平的第三个项目
  • (回答您的实际问题:-))将结果放在一个列表 mcworks, 而不是创建一个新的变量,每一次迭代

其他提示

你是说这样做?

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

列出了在蟒蛇可以包含任何类型的对象--如果我理解正确的问题,将一个 listlists做的工作?像这样的东西(假定你有一个功能 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()]

等等。

我强烈考虑使用 顽固 要做到这一点。你得到有效的N-维阵列,你可以迅速和容易的过程。

一个简洁的方式来做到这一点是使用一个的列表,列出在组合与大熊猫。然后你能够创建一个为期3天的滚动平均值。这使得它很容易搜索的结果只添加真实的人作为另一个列,使用loc功能找到哪些相匹配。

rand_vals = [randint(0, 100) for i in range(5))]
df = pd.DataFrame(data=rand_vals, columns=['generated data'])
df['3 day avg'] = df['generated data'].rolling(3).mean()
df['mcavg'] = mcavg # the list of real data
# Extract the resulting list of values
res = df.loc[df['3 day avg'] == df['mcavg']]['3 day avg'].values

这也是整洁如果你打算使用相同的随机的价值为不同的民意调查/人,只是添加另一个列有他们的真正价值和执行相同的搜寻他们。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top