我有一個包含數字25-1的列表。我試圖把它打印出來就像一個遊戲鍵盤,所有的數字匹配:Python中的格式化列表
我發現瞭如何將行添加到列表中做this:
_b = map(str, board)
_board = ' | '.join(_b)
我知道如何在每行上打印5個數字......但是我無法將所有數字排列在一起。有沒有辦法做到這一點?
我有一個包含數字25-1的列表。我試圖把它打印出來就像一個遊戲鍵盤,所有的數字匹配:Python中的格式化列表
我發現瞭如何將行添加到列表中做this:
_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(25, 0, -1)
def printLine():
print
print "------------------------"
for c in board:
print str(c).ljust(2),'|',
if c % 5 == 1:
printLine()
這段代碼應該可以工作。
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):
只是爲了好玩,這裏有一個1班輪創建的偶數行:
['|'.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
一個有些通用的解決方案,對於二維矩陣表示:
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
我使用列表解析嘗試了不同的方法, String Format Mini-Language。
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轉移提示。
如果你想要左對齊,只需使用'{:<2}'。 – abarnert
一個小問題:OP有尾隨邊框,所以如果你打算使用'join',你需要'join'表達式後加'+'。 – abarnert
我剛剛翻譯了他的代碼示例,之後我認爲他正在用'_board'做一些事情。 – Crast