2016-07-15 72 views
0

每個人。我對Python很陌生,急需一些幫助。我正在計算幾個列表中的唯一值,然後將這些輸出並列顯示爲列。我可以使用集合來對它們進行計數。但是,我不知道如何並排打印它們。有沒有pythonic的方式來連接或並排顯示它們爲列?並列Python列表

我試了下面,但無濟於事。任何幫助,非常感謝。

print(str(parsed_list(a)) + str(parsed_list(b)) + str(parsed_list(b))) 
NoneNoneNone 

我的樣本測試的代碼(Python3):

import collections, operator 

a = ['Black Cat', 'Black Dog', 'Black Mouse'] 
b = ['Bird', 'Bird', 'Parrot'] 
c = ['Eagle', 'Eagle', 'Eagle', 'Hawk'] 


def parsed_list(list): 
    y = collections.Counter(list) 
    for k, v in sorted(y.items(), key=operator.itemgetter(1), reverse=True): 
     z = (str(k).ljust(12, ' ') + (str(v))) 
     print(z) 

print('Column1   Column2    Column3') 
print('-' * 45) 
parsed_list(a) 
parsed_list(b) 
parsed_list(c) 

電流:

Column1   Column2    Column3 
--------------------------------------------- 
Black Cat 1 
Black Dog 1 
Black Mouse 1 
Bird  2 
Parrot  1 
Eagle  3 
Hawk  1 

所需的輸出:

Column1   Column2  Column3 
---------------------------------------- 
Black Cat 1 Bird  2 Eagle 3 
Black Dog 1 Parrot 1 Hawk 1 
Black Mouse 1 
+0

你看着用熊貓來處理這樣的表格數據? –

+0

@ cricket_007不幸的是,這個腳本正在一個我不能(不允許)安裝熊貓的系統上執行。有沒有一種原生的方式來做到這一點?看起來像是經常需要的東西。 – MBasith

回答

0

我肯定可以手動建立自己的圖書館,但Python似乎有一個格式方法d內置於字符串類型中,可以很好地滿足您的需求。

這個link以前的帖子可以幫助你!試一試!

2

以在tabulate module的依賴:

import collections 
from itertools import zip_longest 
import operator 

from tabulate import tabulate 

def parsed_list(lst): 
    width = max(len(item) for item in lst) 
    return ['{key} {value}'.format(key=key.ljust(width), value=value) 
      for key, value in sorted(
       collections.Counter(lst).items(), 
       key=operator.itemgetter(1), reverse=True)] 

a = parsed_list(['Black Cat', 'Black Dog', 'Black Mouse']) 
b = parsed_list(['Bird', 'Bird', 'Parrot']) 
c = parsed_list(['Eagle', 'Eagle', 'Eagle', 'Hawk']) 

print(tabulate(zip_longest(a, b, c), headers=["Column 1", "Column 2", "Column 3"])) 

# Output: 
# Column 1  Column 2  Column 3 
# ------------- ------------- ------------- 
# Black Mouse 1 Bird  2 Eagle  3 
# Black Dog 1 Parrot  1 Hawk  1 
# Black Cat 1 
1
from collections import Counter 
from itertools import zip_longest 
a = ['Black Cat', 'Black Dog', 'Black Mouse'] 
b = ['Bird', 'Bird', 'Parrot'] 
c = ['Eagle', 'Eagle', 'Eagle', 'Hawk'] 

def parse(lst): 
    c = Counter(lst) 
    r = [] 
    for s, cnt in c.most_common(): 
     r += ['%12s%3i' % (s, cnt)] 
    return r 

for cols in zip_longest(parse(a), parse(b), parse(c), fillvalue=15*' '): 
    print(' '.join(cols)) 

這將產生:

Black Cat 1   Bird 2  Eagle 3 
Black Mouse 1  Parrot 1   Hawk 1 
    Black Dog 1