2016-08-19 5 views
4

私はループ内で収集され、以下に示すように同じデータ型(例えば文字列のみ、浮動小数点数のみ)を保持する別々のリストの下にデータを格納します:テーブル出力の列にリストを整形する(python 3)

names = ['bar', 'chocolate', 'chips'] 
weights = [0.05, 0.1, 0.25] 
costs = [2.0, 5.0, 3.0] 
unit_costs = [40.0, 50.0, 12.0] 
私はテーブルの「列」としてこれらのリストを処理すると、次のようになりますフォーマットされたテーブルとしてそれらをプリントアウトしたいき

Names  | Weights | Costs | Unit_Costs 
----------|---------|-------|------------ 
bar  | 0.05 | 2.0 | 40.0 
chocolate | 0.1  | 5.0 | 50.0 
chips  | 0.25 | 3.0 | 12.0 

私はリストからのデータをプリントアウトする方法を知っていますテーブル横に横に横に、私はいくつかのヘルプregのためにオンラインで(そしてこのサイトで)見たしかし、私はそれをPython 2.7で動作させるための助けと3.5.1ではなく私が使っているものを見つけることができました。
私の質問は
上記の4つのリストからどのようにして上記のような表にプリントアウトするのですか?

上記リストの各項目インデックスが関連付けられています(つまり、4つのリストからの入力[0]は同じ項目に関連付けられています; bar、0.05,2.0,40.0)。

+2

文字列の書式設定と 'zip'組み込みのhttps://docs.python.org/3/library/functions.html#zipを見てください。 2.7のソリューションは、疑わしい場合には '2to3.py'を3.5に変換するのが簡単です。 – cdarke

+0

クイック返信をいただきありがとうございます。私はサイトを見て、ご覧ください:) –

+1

ねえ、私はリンクを見て、それが私のために働く方法を見つけました。あなたの助けてくれてありがとう:) –

答えて

1

ここでは、基本的なPython(特別なモジュールなし)で必要なものを実行する小さな実装を示します。

出力は

names = ['bar', 'chocolate', 'chips'] 
weights = [0.05, 0.1, 0.25] 
costs = [2.0, 5.0, 3.0] 
unit_costs = [40.0, 50.0, 12.0] 


titles = ['names', 'weights', 'costs', 'unit_costs'] 
data = [titles] + list(zip(names, weights, costs, unit_costs)) 

for i, d in enumerate(data): 
    line = '|'.join(str(x).ljust(12) for x in d) 
    print(line) 
    if i == 0: 
     print('-' * len(line)) 


names  |weights  |costs  |unit_costs 
--------------------------------------------------- 
bar   |0.05  |2.0   |40.0   
chocolate |0.1   |5.0   |50.0   
chips  |0.25  |3.0   |12.0   
+0

ありがとう、このメソッドは非常に効果的に動作するように見え、優れたフォーマットです。 –

+0

これを共有していただきありがとうございます。良いことに、新しいライブラリをインポートする必要はありません。値の長さが可変であれば、それを考慮に入れてljustに渡される値を調整する必要があります。 – Jtello

0

(cdarkeによって提供されるリンクを)docs.python.org/3/library/functions.html#zipを訪問した後

は私が解決策を見つけるために管理I必要に応じて:

私は、関連するデータの新しい要約リストを作成したzip方法を使用して:

私は新しい要約リストを持っていたら

は、私は(ただし、私は後でフォーマットを扱います)ユーザーにテーブルを整理して印刷するには進んで次のように

# Sort Alphabetically and print 
summary.sort() 
print() 
print("*** Results shown below (alphabetically) ***") 
print("Name\t\tWeight\tCost\tUnit Cost") 
for item in summary: 
    print("") 
    for data in item: 
     print(data, "\t", end='') 

出力は次のようになります。

*** Results shown below (alphabetically) *** 
Name  Weight Cost Unit Cost 

bar  0.05 2.0  40.0  
chips 0.25 3.0  12.0  
chocolate 0.1  5.0  50.0  

おかげで、いくつかの興味深い表がtexttableで描く助け:)

2

ためcdarkeします。

import texttable as tt 
tab = tt.Texttable() 
headings = ['Names','Weights','Costs','Unit_Costs'] 
tab.header(headings) 
names = ['bar', 'chocolate', 'chips'] 
weights = [0.05, 0.1, 0.25] 
costs = [2.0, 5.0, 3.0] 
unit_costs = [40.0, 50.0, 12.0] 

for row in zip(names,weights,costs,unit_costs): 
    tab.add_row(row) 

s = tab.draw() 
print (s) 

結果

+-----------+---------+-------+------------+ 
| Names | Weights | Costs | Unit_Costs | 
+===========+=========+=======+============+ 
| bar  | 0.050 | 2  | 40   | 
+-----------+---------+-------+------------+ 
| chocolate | 0.100 | 5  | 50   | 
+-----------+---------+-------+------------+ 
| chips  | 0.250 | 3  | 12   | 
+-----------+---------+-------+------------+ 

このコマンドpip install texttableを使用してtexttableをインストールすることができます。

関連する問題