繁体   English   中英

将列表中的整数打印为两位数

[英]Printing integers in a list as double digits

我有一个整数列表,需要以矩阵形式打印出来。 我这样做如下:

    matrix = [mylist[i:i + n] for i in range(0, len(mylist), n)]
    for nlist in matrix:
        print(nlist)

这很好用; 例如,如果我的列表是[1 2 3 4 5 6 7 8 9]并且n是3,它将输出:

[1 2 3]
[4 5 6]
[7 8 9]

现在,我不仅要这些整数,还要在它们前面加一个零。 所以01 02 03等。我读到,这很容易用print("{:0=2d}".format(integer)) ,但是它似乎不适用于我的列表或矩阵。 print("{:0=2d}".format(mylist))print("{:0=2d}".format(nlist))给我一条错误消息。

如何使其适用于列表?

另外,我希望允许我在这里问一个很小的问题:如何摆脱矩阵周围的方括号?

编辑:我弄清楚了为什么我的代码不起作用。 我有一条if语句,它表示如果程序遇到0,则必须将零打印为字符串“ X”。 所以有时候我会同时得到一个整数和一个字符串的列表。 像这样:

08 07 06
05 04 03
02 01  X

那我应该将所有内容都转换为字符串吗? 或者我该如何使其工作?

我可以想到的添加零的唯一方法是将它们全部指定为字符串。 然后,要摆脱括号,您将必须分别打印每个数字。

for nlist in matrix:
    for value in nlist:
        print("0" + str(value), end=" ")
    print("")
>>> l = [1,2,3] 
>>> " ".join(list(map(lambda x : "{:0=2d}".format(x), l)))
'01 02 03' 

没有括号,请尝试...

matrix = [mylist[i:i + n] for i in range(0, len(mylist), n)]
for nlist in matrix:
    print(" ".join(list(map(lambda x : "{:0=2d}".format(x), nlist))))

编辑

使用混合列表,您可以像这样更改lambda,

>>> matrix = [[1,2,3],[4,'x',6],[7,8,9]]
>>> for nlist in matrix:
...     print(" ".join(list(map(lambda x: "{:0=2d}".format(x) if isinstance(x,int) else x, nlist))))
... 
01 02 03
04 x 06
07 08 09

编辑:支持新的条件,即0应当打印为X并在python 3.x的print周围包裹括号。

假设您的整数存储在列表l

l = [1, 2, 3, 4, 5, 6, 7, 8, 0]  
n = 3

for i in range(n):
    print(" ".join(["{:0=2d}".format(x) if x != 0 else ' X' for x in l[n*i:n*(i+1)]]))

输出:

01 02 03
04 05 06
07 08  X

解释是我们一次循环遍历列表l ,每组n元素( l[n*i:n*(i+1)] )(我们称其为子列表)。 然后,对子列表的每个元素进行格式化,然后应用format函数将其转换为所需的字符串。 最后,将格式化的子列表与空格连接在一起并打印。

n = 3
mylist = [1, 2, 3, 4, 5, 6, 7, 8, 9]
matrix = [mylist[i:i + n] for i in range(0, len(mylist), n)]
for nlist in matrix:
    mstr = ''
    for i in nlist:
        mstr += "{:0=2d} ".format(i)
    print(mstr)

会给你

01 02 03 
04 05 06 
07 08 09 

您的矩阵是一个列表列表 所以当你做的时候

for nlist in matrix:
        print(nlist)

nlist将是list,您将直接打印它而无需拆包 因此,如果您想避免使用方括号,则可以执行print(*nlist) 有关更多信息,请参阅解压缩

如果要在每个元素前面添加0 ,则可以利用print函数的参数,例如sepend 无论元素是int还是str这都将起作用

matrix = [mylist[i:i + n] for i in range(0, len(mylist), n)]
for nlist in matrix:
    for item in nlist:
      print('0',item,sep='',end=' ')
    print()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM