Как использовать% для печати большого списка чисел?

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

my_format = '%6d%6d%6d%6d%6d%6d%6d%6d%6d%6d%6d%6d%6d%6d%6d\n'
my_list = [1,2,3,4,5,6,199, 57, .........]

По сути, это всего лишь %6d, повторенное 15 раз.

Когда вы используете % для форматирования строки, я знаю, что вам нужно сделать это:

with open('my_out.txt', 'w') as fout:
    fout.write(my_format % (num1, num2, num3, num4, num5, ....., num15)

В моем случае мне нужно было бы разделить my_list на 15 частей, а в последней части у меня может не быть 15 чисел; поэтому мне нужно было бы каким-то образом игнорировать переменные num, у которых просто нет элемента из my_list, потому что я уже перебрал все числа. Кроме того, учитывая, что мне нужно создать 15 переменных (от num1 до num15), поэтому я могу использовать:

my_format % (num1, num2, num3, num4, num5, ....., num15)

Мой файл должен выглядеть так:

0 1 2 3 4 5 6 7 8 9 1 1 2 1 1

1 4 5 8 9 7 5 8 9 7 6 5 4 3 0

3 4 6 7 1 8

Есть ли умный и эффективный способ решить мою проблему?

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
4
0
101
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий

Просто отформатируйте отдельные элементы с помощью %6d, затем соедините их в пустой строке и добавьте новую строку в конец:

nums = list(range(15))
formatted = "".join("%6d" % n for n in nums) + "\n"

print(formatted)
#      0     1     2     3     4     5     6     7     8     9    10    11    12    13    14

Не могли бы вы помочь мне с примером, где вы используете nums = list(range(20)). Как взять только 15 в первой строке, а затем оставшиеся 5 в последней строке

ananvodo 22.12.2020 02:18

@ananvodo stackoverflow.com/q/312443/5923139

Aplet123 22.12.2020 02:19

Если вам нужны только первые 15, а не все 15, то просто нарежьте их: formatted = "".join("%6d" % n for n in nums[:15]) + "\n"

Aplet123 22.12.2020 02:20

Я использовал предоставленную вами ссылку. Мне удалось разбить my_list на куски по 15 элементов. Когда я запускаю ваш код: formatted = "".join("%6d" % n для n в цифрах) + "\n", я получаю сообщение об ошибке: TypeError: %d формат: требуется число, а не список

ananvodo 22.12.2020 02:30

После того, как вы разделите список, вам придется зациклить форматирование на каждом элементе.

Aplet123 22.12.2020 02:31

спасибо за решение. Я разместил ответ, просто используя ваше решение.

ananvodo 22.12.2020 02:40
def chunks(lst, n):
    for i in range(0, len(lst), n):
        yield lst[i:i + n]

my_list = [f'{x:6d}' for x in list(range(300))]

for lst in list(chunks(my_list, 15)):
    print(' '.join(lst))

     0      1      2      3      4      5      6      7      8      9     10     11     12     13     14
    15     16     17     18     19     20     21     22     23     24     25     26     27     28     29
    30     31     32     33     34     35     36     37     38     39     40     41     42     43     44
    45     46     47     48     49     50     51     52     53     54     55     56     57     58     59
    60     61     62     63     64     65     66     67     68     69     70     71     72     73     74
    75     76     77     78     79     80     81     82     83     84     85     86     87     88     89
    90     91     92     93     94     95     96     97     98     99    100    101    102    103    104
   105    106    107    108    109    110    111    112    113    114    115    116    117    118    119
   120    121    122    123    124    125    126    127    128    129    130    131    132    133    134
   135    136    137    138    139    140    141    142    143    144    145    146    147    148    149
   150    151    152    153    154    155    156    157    158    159    160    161    162    163    164
   165    166    167    168    169    170    171    172    173    174    175    176    177    178    179
   180    181    182    183    184    185    186    187    188    189    190    191    192    193    194
   195    196    197    198    199    200    201    202    203    204    205    206    207    208    209
   210    211    212    213    214    215    216    217    218    219    220    221    222    223    224
   225    226    227    228    229    230    231    232    233    234    235    236    237    238    239
   240    241    242    243    244    245    246    247    248    249    250    251    252    253    254
   255    256    257    258    259    260    261    262    263    264    265    266    267    268    269
   270    271    272    273    274    275    276    277    278    279    280    281    282    283    284
   285    286    287    288    289    290    291    292    293    294    295    296    297    298    299
def chunks(lst, n):
    """Yield successive n-sized chunks from lst."""
    for i in range(0, len(lst), n):
        yield lst[i:i + n]

list_chunks = list(chunks(my_list, 15))

all_item = []
for element in x:
    formatted = "".join("%6d" % n for n in element) + "\n"
    all_item.append(formatted)

Вы можете либо сделать его в виде списка, либо напрямую распечатать в файл.

Решение было предоставлено @Aplet123. Я просто собираю все вместе

Не умный (или даже питонический) способ, но он выполняет свою работу:

with open('my_out.txt', 'w') as fout:
    while len(my_list) > 0:
        str = ''
        for loop in range(0, 15):
            try:
                str += '%6d' % my_list.pop(0)
            except:
                break
        str += '\n'
        fout.write(str)

Другие вопросы по теме