Вы можете вложить аргументы для изменения ширины целого числа следующим образом:
job_IDs = ['13453', '123', '563456'];
memory_used = ['30', '150.54', '20.6'];
memory_units = ['MB', 'GB', 'MB'];
w1=15
w2=6
w3=6
w4=3
for i in range(len(job_IDs)):
v=memory_used[i].split('.') if '.' in memory_used[i] else (memory_used[i], '0')
print "Job {item:{w1}} {value[0]:>{w2}}.{value[1]:<{w3}} {units:{w4}}".format(
item=job_IDs[i]+':', w1=w1, w2=w2,w3=w3,w4=w4, value=v, units=memory_units[i])
Таким образом, чтобы определить ширину поля для использования, просто зациклите один раз перед печатью, чтобы определить самую широкую ширину, используемую для каждой применимой встроенной переменной ширины.
Вот так:
job_IDs = ['13453', '123', '563456'];
memory_used = ['30', '150.54', '20.6'];
memory_units = ['MB', 'GB', 'MB'];
w1=1
w2=1
w3=1
w4=1
for i in range(len(job_IDs)):
v=memory_used[i].split('.') if '.' in memory_used[i] else (memory_used[i], '0')
item=job_IDs[i]+':'
units=memory_units[i]
if len(item)>w1: w1=len(item)
if len(v[0])>w2: w2=len(v[0])
if len(v[1])>w3: w3=len(v[1])
if len(units)>w4: w3=len(units)
for i in range(len(job_IDs)):
v=memory_used[i].split('.') if '.' in memory_used[i] else (memory_used[i], '0')
item=job_IDs[i]+':'
units=memory_units[i]
print "Job {item:{w1}} {value[0]:>{w2}}.{value[1]:<{w3}} {units:{w4}}".format(
item=item,w1=w1, w2=w2,w3=w3,w4=w4, value=v, units=units)
Выход:
Job 13453: 30.0 MB
Job 123: 150.54 GB
Job 563456: 20.6 MB