簡體   English   中英

如何垂直打印數字列表?

[英]How do I print a list of numbers vertically?

我正在嘗試解決一個練習。 我應該寫一個 function,它接受一個整數列表,將其轉換為垂直顯示的數字字符串。

mylist = [5,69,2090]

function 應該返回/打印以下字符串:

    2
    0
  6 9
5 9 0

我試圖用下面的代碼解決它,但它對我沒有幫助

def printstring(mylist):
    h = len(mylist)//3
    for i in range(h):
        print(mylist[i],mylist[h+i],l[h+i+1])
lst = [5,69,2090]

n = max(len(str(i)) for i in lst)
for i in zip(*['{:>{n}}'.format(i, n=n) for i in lst]):
    print(' '.join(i))

印刷:

    2
    0
  6 9
5 9 0

對於lst = [1,123,12,12345,1234]

      1  
      2 1
  1   3 2
  2 1 4 3
1 3 2 5 4

首先將您的列表項轉換為字符串,然后找到最大長度。 填充您的字符串以適合該長度並打印它們:

lst = [5, 69, 2090]
lst = list(map(str, lst))
max_lenght = max(map(len, lst))
padded_lst = [item.rjust(max_lenght, " ") for item in lst]
for row in zip(*padded_lst):
    print(" ".join(row))
    2
    0
  6 9
5 9 0

我會在這里應用幾個步驟。 首先,通過將數字轉換為字符串來確定每個數字的最大數字長度。 其次,使用rjust將每個數字字符串左填充到該長度。 最后,使用經典的zip(*m)技巧將矩陣旋轉 90 度並將其全部連接回一個可打印的正方形。

>>> lst = [5,69,2090]
>>> size = max(map(len, map(str, lst)))
>>> m = [str(x).rjust(size, " ") for x in lst]
>>> print("\n".join([" ".join(x) for x in zip(*m)]))
    2
    0
  6 9
5 9 0

不太可讀的兩行

sl = ['{:>{}d}'.format(s, len(str(max(mylist)))) for s in mylist]
print('\n'.join(' '.join(s) for s in zip(*sl))) 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM