【问题标题】:How to vertically print 2d list with different lengths in python如何在python中垂直打印不同长度的二维列表
【发布时间】:2015-12-23 15:32:43
【问题描述】:

事实上,我正在尝试这样做。

我有一张班级电话卡

class Card(object):
def __init__(self, value, folldown,canMove):
    self.value = value
    self.folldown = folldown
    self.canMove=canMove

我用这个来打印

for i in range(len(cards)):
  for j in range(len(cards[i])):
       print cards[i][j].value

我想打印一个不同大小的二维列表a=[[0, 1], [0, 1, 2], [0, 1, 2, 3]]

我想这样打印

0 0 0
1 1 1
  2 2
    3

我试图这样打印

for i in range(len(a)):
  for j in range(len(a[i])):
       print a[i][j]

但结果是

0
1
0
1
2
0
1 
2 
3 

【问题讨论】:

  • 您似乎希望我们为您编写一些代码。虽然许多用户愿意为陷入困境的程序员编写代码,但他们通常只在发布者已经尝试自己解决问题时才提供帮助。展示这项工作的一个好方法是包含您迄今为止编写的代码、示例输入(如果有的话)、预期输出以及您实际获得的输出(控制台输出、回溯等)。您提供的详细信息越多,您可能收到的答案就越多。检查FAQHow to Ask
  • 您能否显示您的代码以及您遇到的错误,以便我们帮助解决此问题?
  • 试试Format String Syntax,看看你能不能让它工作。
  • 2D arrays in Python的可能重复
  • 对不起,如果您觉得我需要有人来编写我的代码。我在 python 方面没有太多经验,而且我的代码太难理解,所以我认为这个例子会更好@MorganThrapp

标签: python python-2.7


【解决方案1】:

另一种单线解决方案

a = [[0, 1], [0, 1, 2], [0, 1, 2, 3]]
from itertools import izip_longest
print "\n".join(("\t".join(map(str,l)) for l in izip_longest(*a, fillvalue="")))

你得到:

0 0 0 1 1 1 2 2 3

【讨论】:

    【解决方案2】:
    a = [[0, 1], [0, 1, 2], [0, 1, 2, 3]]
    print '\n'.join(['\t'.join([str(x[i]) if len(x) > i else '' for x in a]) for i in range(len(max(a)))])
    
    #0    0    0
    #1    1    1
    #     2    2
    #          3
    

    【讨论】:

    • 对于我的解决方案,我使用它并在 x 上添加 .value print '\n'.join(['\t'.join([str(x[i].value) if len(x) > i else '' for x in a]) for i in range(len(max(a)))])
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-29
    • 2013-11-24
    • 1970-01-01
    • 1970-01-01
    • 2018-05-04
    • 2020-07-29
    • 1970-01-01
    相关资源
    最近更新 更多