簡體   English   中英

在python中格式化列表

[英]Formatting list in python

我有一個包含數字25-1的列表。 我試圖像游戲板一樣打印出來,所有數字都匹配起來:

在此輸入圖像描述

我發現了如何通過做線添加到列表

_b = map(str, board)
_board = ' | '.join(_b)

我知道如何在每一行打印5個數字..但是我無法將所有數字排成一行。 有沒有辦法做到這一點?

如果你知道最長的數字是多長,你可以使用以下任何一種方法:

字符串“5”,所需寬度為3個字符:

  • str.rjust(3)將給出字符串' 5'
  • str.ljust(3)將給出字符串'5 '
  • str.center(3)將給出字符串' 5 '

我傾向於喜歡rjust數字,因為排隊的地方,如您將學習如何做長除了上小學了,這讓我開心;)

這會讓你有類似的東西:

_b = map(lambda x: str(x).rjust(3), board)
_board = ' | '.join(_b)

或者,使用生成器表達式:

_board = ' | '.join(str(x).rjust(3) for x in board)
board = range(1,26) #the gameboard
for row in [board[i:i+5] for i in range(0,22,5)]: #go over chunks of five
    print('|'.join(["{:<2}".format(n) for n in row])+"|") #justify each number, join by |
    print("-"*15) #print the -'s

產生

>>> 
1 |2 |3 |4 |5 |
---------------
6 |7 |8 |9 |10|
---------------
11|12|13|14|15|
---------------
16|17|18|19|20|
---------------
21|22|23|24|25|
---------------

或者使用grouper配方@abarnert建議:

for row in grouper(5, board):
board = range(25, 0, -1)
def printLine():
    print
    print "------------------------"
for c in board:
    print str(c).ljust(2),'|',
    if c % 5 == 1:
        printLine()

這段代碼應該有效。

只是為了好玩,這里是一個創建編號行的1-liner:

['|'.join([str(y).center(4) for y in x]) for x in map(None,*[reversed(range(1,26))]*5)]

打破一點,添加行,仍然不是一個干凈的答案:

nums = map(None,*[reversed(range(1,26))]*5)
rows = ['|'.join([str(y).center(4) for y in x]) for x in nums]
board = ('\n'+'-'*len(rows[0])+'\n').join(rows)
print board

對於2D矩陣表示,有點概括的解決方案:

board = [ [22, 1 , 33], [41, 121, 313], [0, 1, 123112312] ]
maxd = max(len(str(v)) for b in board for v in b) + 1 
l    = []
for b in board:
    l.append("|"+" |".join([ '{n: {w}}'.format(n=v, w=maxd) for v in b]) + " |")
sepl = "\n" + '-'*len(l[0]) + "\n"
print sepl, sepl.join(l), sepl

我嘗試了一種使用列表推導和字符串格式迷你語言的不同方法。

boardout = "".join([" {:<2} |".format(x) if (x-1)%5>0 else " {:<2} |\n{}\n".format(x, "-"*25) for x in range(25,0,-1)])
print boardout

這應該產生與OP預期輸出相似的輸出。 編輯:感謝@abarnert的轉變提示。

暫無
暫無

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

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