2013-08-05 4 views
0

После некоторого вычисления я получаю выход, как:кортеж строки форматирования

('  ','donor','  ','distance') 

('  ','ARG','A','43',' ','3.55') 
('  ','SOD','B',93', ' ','4.775') 
('  ','URX','C',33', ' ','3.55') 

в то время как я собирался получить как:

donor   distance 
    ARG A 43   3.55 
    SOD B 93   4.77 
    URX C 33   3.55 

вещь, что я получаю это кортеж, но я очень смущен тем, как сделать этот кортеж в хорошо отформатированном виде по моему желанию. Пожалуйста, дайте некоторое представление ... спасибо.

+2

я заметил со значением "4.775", что вы хотели он должен печатать «4.77», что предполагает усечение. Это правильно или вы просто забыли «5»? – iCodez

+0

ya, это правильно. Я согласен с вашим мнением .. @icodez – diffracteD

ответ

0

Если ваши данные выглядит следующим образом

data = [ 
    ('  ', 'donor', '  ', 'distance'), 
    ('  ', 'ARG', 'A', '43', '  ', '3.55'), 
    ('  ', 'SOD', 'B', '93', '  ', '4.775'), 
    ('  ', 'URX', 'C', '33', '  ', '3.55') 
] 

Тогда вы можете просто

print '\n'.join(map(' '.join, data)) 
+0

Теперь я тебе помогу. Поместите эту «карту (« .join, data »), чтобы напечатать ее, как хочет OP. – iCodez

+0

:) Похоже, у вас был этот кофе. Благодаря! – RussW

+0

ммм ..кофе кажется v эффективным .. спасибо .. – diffracteD

1

Использование str.join() на каждом кортеже:

' '.join(your_tuple) 

перед печатью.

+0

пробовал это ... как '. .join (str (my_tuple) .strip ('() ') .. не имея возможности получить требуемое форматирование .. – diffracteD

+0

Я никогда не говорил вам должен использовать 'str()' в кортеже.Я сказал вам использовать '. '.join (my_tuple)' вместо этого. –

0

Вы можете использовать for-loop и str.join:

lis = [ 
    ('  ','donor',' ','distance'), 
    ('  ','ARG','A','43',' ','3.55'), 
    ('  ','SOD','B','93', ' ','4.775'), 
    ('  ','URX','C','33', ' ','3.55') 
] 

for item in lis: 
    print " ".join(item) 

Выход:

donor  distance 
    ARG A 43 3.55 
    SOD B 93 4.775 
    URX C 33 3.55 
+1

Почему вы не можете просто сделать «.join (item)' напрямую? – RussW

+0

@Downvoter - Не могли бы вы объяснить причину, по которой вы отказались? Я серьезно отношусь к качеству своей работы. Следовательно, если вы нашли то, что, по вашему мнению, является проблемой, сообщите мне, чтобы я мог либо исправить это, либо объяснить лучше. – iCodez

+0

I не думаю, что @Downvoter получит уведомление о вашем сообщении, или они будут? FWIW не был мне :) – RussW

-1

Это звучит, как вы хотите использовать format strings. Например, если предположить, что вы не хранения отступов строк в ваших элементах:

print "{0} {1} {2} {3:>10.2f}".format(*item) 

Вы можете указать точный формат (включая ширину и выравнивание) каждое поле записи в строке формата. В этом примере четвертая строка выравнивается по правому краю, чтобы поместиться в 10 символов, с двумя цифрами, отображаемыми справа от десятичной точки.

Пример использования ваших данных:

>>> x = (('  ','ARG','A','43',' ','3.55'),('  ','SOD','B','93', ' ','4.775'),('  ','URX','C','33', ' ','3.55')) 
>>> f = "{0:3s}{1:1s}{2:2s} {3:>10.3f}" 
>>> for item in x: print f.format(item[1], item[2], item[3], float(item[5])) 
... 
ARGA43  3.550 
SODB93  4.775 
URXC33  3.550 
+0

Я тоже напал на эту ошибку. ;) ОП не хотел данных типа «ARGA43», но «ARG A 43». Проверьте его сообщение. – iCodez

+0

@iCodez Я привел пример, пример. Это можно устранить, добавив два пробела в строку формата. Мой ответ заключался в том, чтобы направить OP для форматирования строк в первую очередь, так как они, вероятно, будут самым полезным способом решения этой проблемы. – cdhowie