如何迭代2d列表来打印表格?

时间:2018-04-26 15:36:40

标签: python python-2.7 list

我有一个这样的课程:

class example:
    def get_a(self): return [1,2,3]
    def get_b(self): return [4,5,6]
    def get_c(self): return [7,8,9]
    def get_all(self): return [['a',self.get_a()],['b',self.get_b()],['c',self.get_c()]]

现在我想使用get_all的返回值来打印这样的表:

a b c
1 4 7
2 5 8
3 6 9

我知道我可以通过以下方式获得相同的输出:

def example_print():
    x = example()
    print 'a b c'
    for a,b,c in zip(x.get_a(),x.get_b(),x.get_c()):
         print a,b,c 

但我对如何迭代get_all返回的2d列表打印相同内容毫无头绪,特别是因为我正在寻找一种没有硬编码项目的方式(想要使用相同的方式)打印可能包含更多"列")的不同实例的列表。

3 个答案:

答案 0 :(得分:4)

一种简单的方法是使用zip转置习语,例如:

for x in zip(*e.get_all()):
    print(*x)

在Python 2中,请确保使用:

from __future__ import print_function 

或者更好的是,只需切换到Python 3。

如果您的列表实际上有两个嵌套级别。这将需要您的方法:

return  [['a',*self.get_a()],['b',*self.get_b()],['c',*self.get_c()]]

或者Python 2中的等价物......

答案 1 :(得分:1)

如果您将get_all定义更改为:

def get_all(self): return ['a'] + self.get_a(), ['b'] + self.get_b(), ['c'] + self.get_c()

然后你就可以使用这样的东西:

from __future__ import print_function

x = example()
for line in zip(*x.get_all()):
     print(*line)

答案 2 :(得分:0)

我尝试了这个并且它有效。

class example:
    def get_a(self): return [1,2,3]
    def get_b(self): return [4,5,6]
    def get_c(self): return [7,8,9]


    def get_all(self):
        a = [['a', *self.get_a()], ['b', *self.get_b()], ['c', *self.get_c()]]
        r = []
        for line in zip(*a):
            r.append([*line])
        return r

if __name__ == '__main__':
    E = example()
    v = E.get_all()
    for i in v:
        print(*i)