我正在尝试用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通过以下方式打印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,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]
答案 0 :(得分:1)
要回答您的问题,我们必须检查拆包运算符(*
)以及它与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 :(得分:1)
您可以使用str.join
将其全部显示为一个字符串:
>>> print("\n".join("".join(str(e) for e in x) for x in l))
000010000
000101000
001000100
010000010
100000001
l
是您的m
答案 2 :(得分:0)
只需要单独的打印语句。
for l in m:
print(l)
答案 3 :(得分:0)
您可以使用pprint:
public printText(text, charset = 'ISO-8859-1') {
// ISO-8859-1,UTF-8
return new Promise((resolve, reject) => {
DatecsPrinter.printText(text, charset, function (success) {
resolve(success);
}, function (error) {
reject(error);
});
});
}
结果:
import pprint
stuff = ['spam', 'eggs', 'lumberjack', 'knights', 'ni']
stuff.insert(0, stuff)
pprint.pprint(stuff)
您可以看到更多示例here