atribuindo pontos às posições

Qual é uma boa maneira de classificar valores numéricos em um determinado intervalo? Por exemplo, suponha que eu tenha uma lista de valores e que queira colocá-los em N bin pelo intervalo. No momento, faço algo assim:

from scipy import *
num_bins = 3 # number of bins to use
values = # some array of integers...
min_val = min(values) - 1
max_val = max(values) + 1
my_bins = linspace(min_val, max_val, num_bins)
# assign point to my bins
for v in values:
  best_bin = min_index(abs(my_bins - v))

onde min_index retorna o índice do valor mínimo. A idéia é que você pode encontrar a posição na qual o ponto se encaixa, vendo em qual posição ela tem a menor diferença.

Mas acho que isso tem casos extremos estranhos. O que estou procurando é uma boa representação dos compartimentos, idealmente aqueles que estão meio fechados e meio abertos (para que não haja maneira de atribuir um ponto a dois compartimentos), ou seja,

bin1 = [x1, x2)
bin2 = [x2, x3)
bin3 = [x3, x4)
etc...

qual é uma boa maneira de fazer isso no Python, usando numpy / scipy? Eu só estou preocupado aqui com binning valores inteiros.

muito obrigado pela sua ajuda.