一系列列表理解说明的较短版本

时间:2014-11-07 14:03:11

标签: python list-comprehension

以下

ks = (5, 7, 9, 11, 13, 15)

lo = list([(s**2-1) for s in ks[0:-1]])
lo.append(int((ks[-1]**2-1)*1.5))

inc = list([v/6 for v in lo[0:3]])
inc.extend([v/4 for v in lo[3:5]])
inc.append(lo[-1]/6)

mi = list([a + b for a, b in zip(lo, inc)])
hi = list([a + b for a, b in zip(mi, inc)])

CENTER_CELL = {'High': hi, 'Low': lo, 'Mid': mi}

结果

{'High': [32, 64, 106, 180, 252, 448],
 'Low': [24, 48, 80, 120, 168, 336],
 'Mid': [28, 56, 93, 150, 210, 392]}

是否有任何方式压缩上述说明(除了打字,一个接一个,18个数字)?

1 个答案:

答案 0 :(得分:1)

您可以使用numpy,这使这些矢量操作更容易:

import numpy as np

ks = np.array([5, 7, 9, 11, 13, 15])
lo = np.int64((ks**2 - 1)*np.array([1]*5 + [1.5]))
inc = np.int64(lo*np.array([1/6.]*3 + [1/4.]*2 + [1/6.]))
CENTER_CELL = {'High': lo + 2*inc, 'Low': lo, 'Mid': lo + inc}

但老实说,我不太明白为什么要压缩你的代码。我同意jonrsharpe,你的确可以做得更久。