如何将一个列表中的子列表分别打印在不同的行上?

3
我正在尝试使用列表嵌套的方式在Python中制作Pascal金字塔。这种方法可以更轻松地在所需位置插入需要的值。一切都正常工作,但是当我打印列表时,它并没有按照我想要的行格式进行正确格式化。我已经尝试使用“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以如下方式打印:[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]。然而,我需要它以如下方式打印:
[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个回答

2
为了回答你的问题,我们必须检查解包操作符(*)以及它如何与print一起使用。
回想一下,解包操作符将一个可迭代对象转换为多个元素,这些元素按顺序传递给函数。
然后,我们知道printargs的形式接受多个参数,并在必要时使用分隔符将它们分开。有了这个想法,我们可以看到打印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')


谢谢!我只是刚开始学编程,所以这个问题可能看起来很蠢。 - JohelPF
1
@JohelPF 唯一愚蠢的事情就是过于害怕提问和改进。 - gmds

1
你可以使用str.join将它们全部连接成一个字符串:
>>> print("\n".join("".join(str(e) for e in x) for x in l))
000010000
000101000
001000100
010000010
100000001

其中l代表你的m


0

只需要单独的打印语句。

for l in m:
    print(l)

0

你可以使用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']

你可以在这里看到更多的例子。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接