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

Python 一系列列表理解说明的较短版本,python,list-comprehension,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 = lis

以下

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个数字)

您可以使用
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的观点,你确实可以把它写得更长。

与其让我们试着去挖掘你的代码的用途,不如从数学上告诉我们你想做什么?如果有什么,我建议你写一个更长的版本-什么是
ks
<代码>s?我猜
lo
mi
hi
是低、中、高三种,但
inc
?它与高通(滤波器)内核有关
ks
表示内核大小。对于大小为n*n的每个内核,将导出一个中心单元值(对于内核本身)作为内核大小的函数。中心单元值的常规公式为n*2-1。看见在本出版物中,中心单元格值并不完全遵循公式。也许其中有些是经验性的——我找不到唯一的序列模式。出于对学习和实践Python的纯粹兴趣,我正在尝试进一步压缩代码。也许我在这里发布这篇文章是错误的。我在寻求缩短代码的方法。例如,最后两行可以合并为一行吗?如果您的代码做了您希望它做的事情(即,它可以工作),并且您只是在寻找使其更好的方法,那么您可能会感兴趣。但要注意:它们将帮助您改进代码,这与缩短代码是两码事。