la tabulación en consola usualmente es representada por 8 espacios
entonces los numeros que tengas menos de 8 cifras de largo estaràn dentro de la tabulaciòn (en estaos ejemplos la barra | estará en el espacio siguiente al multiplo de 8)
>>> print "123456789\n\t|"
la tabulaciòn es el espacio justo tras esa barra y las tabulaciones siempre serán una posición multiplo de 8, así que cuando un numero tiene 8 cifras de largo, la tabulación queda en la posición 9 y como la tabulación representa en multiplos de 8, se moverá al espacio 16...
>>> print "1234567890123456789\n\t|1234567\t|\n12345678\t|
1234567890123456789
1234567 |
12345678 |
por eso se te descuadra...
tu segundo codigo formatéa los espacios a mano
el % es equivalente al uso de printf en C, %s imprimirá un string %d un digito, etc, pero el formato %-4s lo que le dice es "imprime un string y si no llega a 4 de llargo, rellena con espacios"
aqui hay unos ejemplo simples
http://interactivepython.org/runestone/static/pip/StringFormatting/interpolation.htmly aquì algo màs complejo
https://pyformat.info/