Довольно печатать список списков? - PullRequest
4 голосов
/ 23 января 2010

По сути, мне нужно вывести ряд показаний температуры в текстовый файл. Это список элементов, разделенных пробелом, где каждая строка представляет что-то (я не знаю, и это просто заполняется моделью Фортрана, shudder ). Я более или менее обращаюсь к этому со стороны наших групп, которая извлекает эти показания температуры и помещает их в текстовый файл.

В общем, быстрый пример: у меня есть такой список (но с большим количеством элементов):

temperature_readings = [ [1.343, 348.222, 484844.3333], [12349.000002, -2.43333]]

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

    1.343     348.222     484844.333
12349.000002   -2.433333

Итак, эти замечательные десятичные дроби выстраиваются в линию. Есть ли простой способ сделать это?

Ответы [ 5 ]

3 голосов
/ 23 января 2010

вы можете правую панель, как это:

str = '%-10f' % val

к левой клавиатуре:

set = '%10f' % val

или в комбинации клавиш и установите точность до 4 десятичных знаков:

str = '%-10.4f' % val

import sys
rows = [[1.343, 348.222, 484844.3333], [12349.000002, -2.43333]]
for row in rows:
  for val in row:
    sys.stdout.write('%20f' % val)
  sys.stdout.write("\n")

        1.343000          348.222000       484844.333300
    12349.000002           -2.433330
2 голосов
/ 24 января 2010

Оператор% (форматирование строки) устарел.

Вы можете использовать str.format для красивой печати в Python.

Что-то вроде этого может работать для вас:

for set in temperature_readings:
    for temp in set:
        print "{0:10.4f}\t".format(temp),
    print

Что выводит следующее:

    1.3430        348.2220      484844.3333
12349.0000         -2.4333

Подробнее об этом можно прочитать здесь: http://docs.python.org/tutorial/inputoutput.html#fancier-output-formatting

1 голос
/ 24 января 2010

В Python 2. *,

for sublist in temperature_readings:
    for item in sublist:
        print '%15.6f' % item,
    print

испускает

       1.343000      348.222000   484844.333300
   12349.000002       -2.433330

для вашего примера. Измените длину и количество десятичных знаков, как вы предпочитаете, конечно!

1 голос
/ 24 января 2010

Если вы также хотите отобразить фиксированное количество десятичных знаков (что, вероятно, имеет смысл, если числа действительно являются показаниями температуры), что-то вроде этого дает довольно хороший вывод:

for line in temperature_readings:
   for value in line:
      print '%10.2f' % value,
   print

Выход:

      1.34     348.22  484844.33
  12349.00      -2.43
0 голосов
/ 24 января 2010

Выезд Python pprint .

Модуль pprint позволяет «красиво печатать» произвольные структуры данных Python в форме, которую можно использовать в качестве входного для интерпретатора.

[...]

В этом примере демонстрируется несколько вариантов использования функции pprint () и ее параметров.

>>> import pprint
>>> tup = ('spam', ('eggs', ('lumberjack', ('knights', ('ni', ('dead',
... ('parrot', ('fresh fruit',))))))))
>>> stuff = ['a' * 10, tup, ['a' * 30, 'b' * 30], ['c' * 20, 'd' * 20]]
>>> pprint.pprint(stuff)
['aaaaaaaaaa',
 ('spam',
  ('eggs',
   ('lumberjack',
    ('knights', ('ni', ('dead', ('parrot', ('fresh fruit',)))))))),
 ['aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb'],
 ['cccccccccccccccccccc', 'dddddddddddddddddddd']]
>>> pprint.pprint(stuff, depth=3)
['aaaaaaaaaa',
 ('spam', ('eggs', (...))),
 ['aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb'],
 ['cccccccccccccccccccc', 'dddddddddddddddddddd']]
>>> pprint.pprint(stuff, width=60)
['aaaaaaaaaa',
 ('spam',
  ('eggs',
   ('lumberjack',
    ('knights',
     ('ni', ('dead', ('parrot', ('fresh fruit',)))))))),
 ['aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',
  'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb'],
 ['cccccccccccccccccccc', 'dddddddddddddddddddd']]

В противном случае выясните, какое самое длинное число с точки зрения длины символа, и используйте параметры форматирования Python , чтобы сделать все одинаковой длины. Или используйте вкладки в качестве разделительных символов. Множество вариантов!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...