Dividir una lista en N partes de aproximadamente la misma longitud

¿Cuál es la mejor manera de dividir una lista enaproximadamente ¿a partes iguales? Por ejemplo, si la lista tiene 7 elementos y está dividida en 2 partes, queremos obtener 3 elementos en una parte, y la otra debe tener 4 elementos.

Estoy buscando algo comoeven_split(L, n) que se rompeL dentron partes.

def chunks(L, n):
    """ Yield successive n-sized chunks from L.
    """
    for i in xrange(0, len(L), n):
        yield L[i:i+n]

El código anterior da los trozos de 3, en lugar de 3 trozos. Simplemente podría transponer (iterar sobre esto y tomar el primer elemento de cada columna, llamar a esa primera parte, luego tomar la segunda y colocarla en la segunda parte, etc.), pero eso destruye el orden de los artículos.