Как распечатать список списков в разных строках? - PullRequest
2 голосов
/ 26 апреля 2019

Я пытаюсь сделать пирамиду Паскаля в python, и я делаю это со списком списков, таким образом легче вставить значения, которые мне нужны, позиции, они мне нужны, все работает нормально, кроме случаев, когда я печатаю список списков не корректно форматируется строка за строкой, как я хочу

Я попытался отформатировать с помощью end = "" и с помощью * распаковать список списков, однако ни один из них, похоже, не работает


    def unos(n,fila,columna,m):
        mitad=columna//2
        m[0][4]=1
        for i in range(1,fila):
            x=mitad+i
            y=mitad-i
            m[i][x]=1
            m[i][y]=1

    **print(*m)**#The error seems to be here(I could be wrong)

Python печатает m следующим образом: [0, 0, 0, 0, 1, 0, 0, 0, 0] [0, 0, 0, 1, 0, 1, 0, 0, 0] [0, 0, 1, 0, 0, 0, 1, 0, 0] [0, 1, 0, 0, 0, 0, 0, 0, 1, 0] [1, 0, 0, 0, 0, 0, 0, 0, 1]

Однако мне нужно распечатать это:

[0, 0, 0, 0, 1, 0, 0, 0, 0]

[0, 0, 0, 1, 0, 1, 0, 0, 0]

[0, 0, 1, 0, 0, 0, 1, 0, 0]

[0, 1, 0, 0, 0, 0, 0, 1, 0]

[1, 0, 0, 0, 0, 0, 0, 0, 1]

Ответы [ 4 ]

1 голос
/ 26 апреля 2019

Чтобы ответить на ваш вопрос, мы должны проверить оператор распаковки (*) и то, как он работает с print.

Напомним, что оператор распаковки берет одну итерацию и превращает ее в несколько элементов, которыепередаются последовательно в функцию.

Затем мы знаем, что print принимает несколько аргументов в форме args, используя разделитель для их разделения, если это необходимо.Имея это в виду, мы можем видеть, что четыре способа печати a b c эквивалентны:

print('a', 'b', 'c')
print(*['a', 'b', 'c'])
print(sep.join(['a', 'b', 'c']))
print('a' + sep + 'b' + sep + 'c')

... где sep по умолчанию (один пробел).

Теперь отметим, что m является вложенным list.Поэтому, делая print(*m), вы фактически print(m[0], m[1]...m[-1]), где m[0], m[1]...m-1 индивидуально lists.

Обращаясь к нашему анализу print выше, мы можем видеть, что это то же самое, что и print(m[0] + ' ' + m[1] + ' ' + ... + ' ' + m[-1]).

Ясно, что в этом нет никаких новых строк, но должны быть новые строки там, где есть пробелы.

Чтобы получить то, что мы хотим, то есть новую строку после каждого элемента, поэтому мы можемпросто сделай print(*m, sep='\n').

1 голос
/ 26 апреля 2019

Вы можете использовать str.join, чтобы показать все это вместе в строке:

>>> print("\n".join("".join(str(e) for e in x) for x in l))
000010000
000101000
001000100
010000010
100000001

Где l - ваш m

0 голосов
/ 26 апреля 2019

вы можете использовать pprint :

import pprint
stuff = ['spam', 'eggs', 'lumberjack', 'knights', 'ni']
stuff.insert(0, stuff)
pprint.pprint(stuff)

результат:

 [<Recursion on list with id=...>,
 'spam',
 'eggs',
 'lumberjack',
 'knights',
 'ni']

вы можете увидеть больше примеров здесь

0 голосов
/ 26 апреля 2019

Просто нужны отдельные выписки для печати. ​​

for l in m:
    print(l)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...