Io non penso c'è un modo semplice per farlo, poiché è necessario conoscere la posizione del punto decimale in tutti i numeri prima di iniziare a stamparli. (Ho appena dato un'occhiata al link di Caramiriel e ad alcuni link da quella pagina, ma non sono riuscito a trovare nulla di particolarmente applicabile a questo caso).
Quindi sembra che si debba eseguire un'ispezione basata su stringhe & manipolazione dei numeri nell'elenco. Ad esempio,
def dot_aligned(seq):
snums = [str(n) for n in seq]
dots = [s.find('.') for s in snums]
m = max(dots)
return [' '*(m - d) + s for s, d in zip(snums, dots)]
nums = [4.8, 49.723, 456.781, -72.18]
for s in dot_aligned(nums):
print(s)
uscita
4.8
49.723
456.781
-72.18
Se si desidera gestire un elenco di float
s con qualche pianura int
s mista in, allora questo approccio diventa un po 'disordinata.
def dot_aligned(seq):
snums = [str(n) for n in seq]
dots = []
for s in snums:
p = s.find('.')
if p == -1:
p = len(s)
dots.append(p)
m = max(dots)
return [' '*(m - d) + s for s, d in zip(snums, dots)]
nums = [4.8, 49.723, 456.781, -72.18, 5, 13]
for s in dot_aligned(nums):
print(s)
uscita
4.8
49.723
456.781
-72.18
5
13
aggiornamento
Come Mark Ransom note nei commenti, siamo in grado di semplificare la gestione int
s utilizzando .split
:
def dot_aligned(seq):
snums = [str(n) for n in seq]
dots = [len(s.split('.', 1)[0]) for s in snums]
m = max(dots)
return [' '*(m - d) + s for s, d in zip(snums, dots)]
correlati: https://stackoverflow.com/questions/1025379/decimal-alignment-formatting-in-python – Caramiriel