你好代码骑士,
我有一个棘手的问题,我看不出一个简单的解决办法人类的历史表明,任何事情都有一个简单的解决办法(不包括买礼物)
问题是:
我需要一个算法,它接受多维列表和一个筛选字典,对它们进行处理并根据筛选返回列表。
例如:

Bathymetry ('x', 'y')=(182, 149) #notation for (dimensions)=(size)
Chl  ('time', 'z', 'y', 'x')=(4, 31, 149, 182)
filters {'x':(0,20), 'y':(3), 'z':(1,2), time:()} #no filter stands for all values

将返回:
readFrom.variables['Bathymetry'][0:21, 3]
readFrom.variables['Chl'][:, 1:3, 3, 0:21]

我在考虑尺寸的for循环,从过滤器列表中读取过滤器,但是我无法真正地将属性传递给切片机。
非常感谢您的帮助。

最佳答案

类似于以下的方法应该有效:

def doit(nam, filters):
    alldims = []
    for dimname in getDimNames(nam):
      filt = filters.get(dimname, ())
      howmany = len(filt)
      if howmany == 0:
        sliciflt = slice()
      elif howmany == 1:
        sliciflt = filt[0]
      elif howmany in (2, 3):
        sliciflt = slice(*filt)
      else:
        raise RuntimeError("%d items in slice for dim %r (%r)!"
                           % (howmany, dimname, nam))
      alldims.append(sliciflt)


return readFrom.variables[nam][tuple(alldims)]

10-08 08:35