簡體   English   中英

如何遍歷二維列表以打印表格?

[英]How to iterate a 2d list to print a table?

我有這樣的課:

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列表以打印相同內容get_all ,特別是因為我正在尋找一種不對項目進行硬編碼的方式(想對不同的實例使用相同的方式打印列表)可能會有更多的“列”)。

一種簡單的方法是使用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的東西...

如果將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)

我嘗試了一下,它起作用了。

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)

暫無
暫無

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

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