格式化python中列表的不均匀列表

时间:2017-04-15 21:12:46

标签: python python-3.x

我有一个代表纸牌游戏的列表列表。该列表表示卡的行和列。我试图用整齐的列和行打印卡片,但我似乎无法弄明白。这就是我所拥有的:

maxCol = len(tableaus[0])
for row in tableaus:
    rowLength = len(row)
    if rowLength > maxCol:
        maxCol = rowLength
tab = []
for colIndex in range(maxCol):
    tab.append([])
    for row in tableaus:
        if colIndex < len(row):
            tab[colIndex].append(row[colIndex])
for s in tab:
    print("{:4s}".format(str(s)))

目前的输出是:

=================Tableaus=================
---1----2----3----4----5----6----7----8---
[K♠, Q♠, J♠, 10♠, 9♠, 8♠, 7♠, 6♠]
[5♠, 4♠, 3♠, 2♠, A♠, K♥, Q♥, J♥]
[10♥, 9♥, 8♥, 7♥, 6♥, 5♥, 4♥, 3♥]
[2♥, A♥, K♦, Q♦, J♦, 10♦, 9♦, 8♦]
[7♦, 6♦, 5♦, 4♦, 3♦, 2♦, A♦, K♣]
[Q♣, J♣, 10♣, 9♣, 8♣, 7♣, 6♣, 5♣]
[4♣, 3♣, 2♣, A♣]

但应该是:

=================Tableaus=================
---1----2----3----4----5----6----7----8---
   K♠   Q♠   J♠  10♠   9♠   8♠   7♠   6♠  
   5♠   4♠   3♠   2♠   A♠   K♥   Q♥   J♥  
  10♥   9♥   8♥   7♥   6♥   5♥   4♥   3♥  
   2♥   A♥   K♦   Q♦   J♦  10♦   9♦   8♦  
   7♦   6♦   5♦   4♦   3♦   2♦   A♦   K♣  
   Q♣   J♣  10♣   9♣   8♣   7♣   6♣   5♣  
   4♣   3♣   2♣   A♣  


tableaus = [[K♠, 5♠, 10♥, 2♥, 7♦, Q♣, 4♣], [Q♠, 4♠, 9♥, A♥, 6♦, J♣, 3♣], [J♠, 3♠, 8♥, K♦, 5♦, 10♣, 2♣], [10♠, 2♠, 7♥, Q♦, 4♦, 9♣, A♣], [9♠, A♠, 6♥, J♦, 3♦, 8♣], [8♠, K♥, 5♥, 10♦, 2♦, 7♣], [7♠, Q♥, 4♥, 9♦, A♦, 6♣], [6♠, J♥, 3♥, 8♦, K♣, 5♣]]

任何提示?

2 个答案:

答案 0 :(得分:2)

目前,您只需拨打一次str.format即可格式化每一行。这并不是你想要的,因为行是一个列表,用括号和不均匀的间距打印出来。您希望将格式应用于列表的每个元素。尝试:

for row in tab:
    print("".join(format(str(item), ">4") for item in row)

答案 1 :(得分:0)

这是一个“最小,完整,可验证的答案”,假设表格如图所示定义。如果这对您不起作用,您现在知道我为什么要求MCVE了。

#coding:utf8
tableaus = [['K♠', 'Q♠', 'J♠', '10♠', '9♠', '8♠', '7♠', '6♠'],
            ['5♠', '4♠', '3♠', '2♠', 'A♠', 'K♥', 'Q♥', 'J♥'],
            ['10♥', '9♥', '8♥', '7♥', '6♥', '5♥', '4♥', '3♥'],
            ['2♥', 'A♥', 'K♦', 'Q♦', 'J♦', '10♦', '9♦', '8♦'],
            ['7♦', '6♦', '5♦', '4♦', '3♦', '2♦', 'A♦', 'K♣'],
            ['Q♣', 'J♣', '10♣', '9♣', '8♣', '7♣', '6♣', '5♣'],
            ['4♣', '3♣', '2♣', 'A♣']]

print('=================Tableaus=================')
print('---1----2----3----4----5----6----7----8---')

for row in tableaus:
    print(''.join(format(c,'>5') for c in row))

这使用列表推导来格式化宽度为5,右对齐字段的行中的每个元素,然后将每个元素连接成一个字符串。

=================Tableaus=================
---1----2----3----4----5----6----7----8---
   K♠   Q♠   J♠  10♠   9♠   8♠   7♠   6♠
   5♠   4♠   3♠   2♠   A♠   K♥   Q♥   J♥
  10♥   9♥   8♥   7♥   6♥   5♥   4♥   3♥
   2♥   A♥   K♦   Q♦   J♦  10♦   9♦   8♦
   7♦   6♦   5♦   4♦   3♦   2♦   A♦   K♣
   Q♣   J♣  10♣   9♣   8♣   7♣   6♣   5♣
   4♣   3♣   2♣   A♣