使用else语句定义变量和数组 - Python

时间:2014-02-28 17:55:32

标签: python arrays

我正在尝试将质量控制过滤器应用于netCDF文件中的大型数据集。在netCDF中有一个称为nstorms的维度,其中有lat,lon,date和其他与每个nstorm值相关的变量(其中nstorms的范围是0到230348)。为了应用质量控制,我目前正在使用带有if和else语句的for循环:

for i in range(len(lowerBound)):
  if min37[i] >= lowerBound[i] and min37[i] < upperBound[i]:
    nstorms_bad = i
    print nstorms_bad
  else:
    nstorms_good =  #everything else - all the other 'i' values
    print nstorms_good
    #Put values for nstorms_good into an array

lowerBound与nstorms的大小相同,因为nstorms和lowerBound都从零开始,nstorms_bad = i返回的值与netCDF中的错误数据匹配(即为nstorms_bad返回的前几个值为306,408,486)这些值与netCDF文件中与nstorms 306,408和486相关的错误数据相匹配。

我遇到的问题是我需要良好的nstorms值,我需要将它们放入一个数组中,以便我可以返回到netCDF文件并将nstorms_good的每个值与其各自的可变数据相关联(lat,lon) ,时间等...)。如果我设置nstorms_good = i,那么我只会获得所有i值的列表,而不应用任何质量控制?定义nstorms_good以便它包含所有i值除了坏值之外的最佳方法是什么(因为使用i与实际的nstorms匹配)我该怎么做将所有这些值放入数组中?将nstorms_bad设置为数组然后为包含数字0到230348的nstorms_good创建一个新数组然后比较两个数组会更容易吗?

2 个答案:

答案 0 :(得分:1)

看起来您需要稍后在所有nstorms_good上进行迭代。因此,任何容器都可以执行:listdict甚至set

使用dict可以存储关于每个nstorms_good的一些额外数据,但由于你真的只需要索引,我会选择列表:

nstorms_good = []
for i in range(len(lowerBound)):
  if min37[i] >= lowerBound[i] and min37[i] < upperBound[i]:
    ...
  else:
    nstorms_good.append( i )

# process
for nstorm in nstorms_good:
    ...

答案 1 :(得分:0)

你似乎想要的是两个列表,其中一个列表与风暴数据列表中的恶劣风暴相关联,所有索引与good_storms相关联。这就像

god = []
bad = []
for i in range(len(lowerBound):
  if min37[i] >= lowerBound[i] and min37[i] < upperBound:
    bad.append(i)
  else:
    good.append(i)

现在,您可以遍历两个列表并获取相应的参考。