def snap(origin, point, grid):
def singlesnap( (o, p, d) ):
p = p - o
p_d = p % d
if p_d < d / 2.:
return p - p_d + o
else:
return p - p_d + o + d
return map(singlesnap, zip(origin, point, grid))
origin = [0] * 3
point = [
3,
7,
32,
]
grid = [5] * 3
print snap(origin, point, grid)