我正在编写一个用于扫描特定地图(2D数组)的函数。为了避免扫描阵列之外的斑点,我编写了一些if语句,但是这样做的方式感觉很错误,漫长且效率低。
H是地图的高度值,int W是宽度,int c是当前点,一个包含x和y值的元组。
floorH = c[0]-D
floorW = c[1]-D
ceilingH = c[0]+D+1
ceilingW = c[1]+D+1
if floorH < 0:
floorH = 0
if floorW < 0:
floorW = 0
if ceilingH > H:
ceilingH = H
if ceilingW > W:
ceilingW = W
我该如何写得更好?
预先感谢:)
答案 0 :(得分:8)
您可以只使用max和min函数来代替使用条件。
floorH = c[0]-D
floorW = c[1]-D
ceilingH = c[0]+D+1
ceilingW = c[1]+D+1
floorH = max(floorH, 0)
floorW = max(floorW, 0)
ceilingH = min(ceilingH , H)
ceilingW = min(ceilingW , W)
实际上,您可以使其更短:
floorH = max(c[0]-D, 0)
floorW = max(c[1]-D, 0)
ceilingH = min(c[0]+D+1, H)
ceilingW = min(c[1]+D+1, W)
答案 1 :(得分:1)
您可以像这样格式化if
来节省空间:
floorH = c[0]-D if c[0]-D > 0 else 0
floorW = c[1]-D if c[1]-D > 0 else 0
ceilingH = c[0]+D+1 if c[0]+D+1 < H else H
ceilingW = c[1]+D+1 if c[1]+D+1 < W else W