2015-09-02 42 views
2

我想通過組合兩個列表中的數據來構建一些在python中的可呈現表格。通過組合列表構造'表'

舉個例子,比方說我錄的選手在比賽中,我有名字,時間和每個人一些其他的任意測量:

headings = ['Name:','Time:','Awesomeness:'] 

info = [('Foo', 15.24242, 100), ('Bar', 421.333, 10), ('Pyth the Python', 3.333, 9000)] 

我已經通過使功能應用某些格式neatomatic9000以使表格的列正確縮進。

def neatomatic9000(something): 
    print("{0: <20}".format(something), end = '') 

for i in headings: 
    neatomatic9000(i) 
print('\n') 
for j in info: 
    for k in j: 
     neatomatic9000(k) 
    print('\n') 

我的表印像這樣:

Name:    Time:    Awesomeness:   

Foo     15.24242   100     

Bar     421.333    10     

Pyth the Python  3.333    9000 

這看起來不錯,但我試圖與標題表作爲左邊一列 - 基本上我試圖轉它看起來像這樣:

Name:    Foo    Bar   Pyth the Python 

Time:    15.24242   421.333  3.333   

Awesomeness:  100    10    9000 

編輯:在另一方面,蟒蛇僵硬似乎缺乏一個檢查,看看如果事情是一個數無關,如果它是一個浮動或整數。我似乎無法合併一個條件來檢查一個條目是否是一個數字,然後將其四捨五入到小數點後兩位。"{:.2f}".format(k)

回答

1

您的意思是這樣的嗎?

for num, heading in enumerate(headings): 
    neatomatic9000(heading) 
    for j in info: 
     neatomatic9000(j[num]) 
    print('\n') 

輸出:

Name:    Foo     Bar     Pyth the Python  

Time:    15.24242   421.333    3.333    

Awesomeness:  100     10     9000     

enumerate功能將像[a, b, c]列表弄成[(0, a), (1, b), (2, c)]。我們希望每個標題有一行,所以這是我們的外部循環。然後在第0個標題中,我們打印每個參賽者的第0個值。對於下一個標題,我們爲每個參賽者打印下一個值,依此類推。

請注意,這基本上是你的循環,但裏面。

+0

我需要開始學習枚舉函數。從來不知道它是作爲python中的內置函數存在的。謝謝。有沒有一種方法可以包含一個檢查以確保每個非字符串條目都是通過{:.2f}「。格式化(floatgoeshere)? – user155876

+0

是的!請參閱下面的@ EMS的答案。您可以檢查是否有某個數字'isinstance(x,Number)')或者它不是一個字符串('不是isinstance(x,str)')。 –

0

不看你的代碼:

for left_heading in headings: # for every heading 
    row = left_heading # start with the heading 
    for info in infos: # from data 
     row+= str(info[n])+'\t' # add data to heading 
    n+=1 # move to next index 
    row+='\n' # add spacing 
    print row 
0
headings = ['Name:','Time:','Awesomeness:'] 
info = [('Foo', 15.24242, 100), ('Bar', 421.333, 10), ('Pyth the Python', 3.333, 9000)] 
info = [[info[v][i] for v in range(len(info))] for i, x in enumerate(info)] 

def neatomatic9000(something): 
    print("{0: <20}".format(something), end = '') 

for i, j in enumerate(info): 
    neatomatic9000(headings[i]) 
    for k in j: 
     neatomatic9000(k) 
    print('\n') 
1

至於確定一個Python對象是否是一個數字(整數,浮點等),請參閱here。簡而言之,「從數字導入號碼」...「isinstance(obj,Number)」