Как вывести «красивую» строку в Python

Mehrdad Afshari ответ добился бы цели, но я нашел его немного слишком подробным для этой простой задачи. Таблицы поиска могут иногда делать чудеса:

void gen_random(char *s, const int len) {
    static const char alphanum[] =
        "0123456789"
        "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
        "abcdefghijklmnopqrstuvwxyz";

    for (int i = 0; i < len; ++i) {
        s[i] = alphanum[rand() % (sizeof(alphanum) - 1)];
    }

    s[len] = 0;
}

27
задан pradyunsg 10 May 2013 в 06:39
поделиться

2 ответа

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

print string1.ljust(20) + string2.ljust(20)
5
ответ дан 28 November 2019 в 04:23
поделиться

Эта функция немного упрощает понимание списка, но она выполняет то, что вы ищете, с оптимальной производительностью: алгоритм

:

  1. находит самое длинное поле в каждом колонка; то есть 'max (map (len, column_vector))'
  2. для каждого поля (слева направо, сверху вниз), вызовите str.ljust, чтобы выровнять его по левой границе столбца, которому он принадлежит.
  3. объединить поля с желаемым количеством разделяющих пробелов (создавая строку).
  4. объединить коллекцию строк с новой строкой.

row_collection: список итераций (dicts / sets / lists), каждый из которых содержит данные для одной строки.

key_list: список, который указывает, какие ключи / индексы нужно читать из каждой строки, чтобы сформировать столбцы.

def getPrintTable(row_collection, key_list, field_sep=' '*4):
  return '\n'.join([field_sep.join([str(row[col]).ljust(width)
    for (col, width) in zip(key_list, [max(map(len, column_vector))
      for column_vector in [ [v[k]
        for v in row_collection if k in v]
          for k in key_list ]])])
            for row in row_collection])
3
ответ дан 28 November 2019 в 04:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: