web-dev-qa-db-ja.com

リストをテーブル出力の列にフォーマットする(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

リストのデータをテーブルの行全体に水平に印刷する方法を知っているだけで、この問題に関するヘルプをオンラインで(そしてこのサイトで)探しましたが、python 2.7であり、3.5.1ではありません。これは私が使用しているものです。
私の質問は:
上記の4つのリストからエントリを取得して、上記のようにテーブルに出力するにはどうすればよいですか。

上記のリストの各アイテムインデックスが関連付けられています(つまり、4つのリストのentry [0]が同じアイテムに関連付けられています(バー、0.05、2.0、40.0)。

11
Jake Cannon

texttableを使用した興味深いテーブルドロー。

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         |
+-----------+---------+-------+------------+

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

7
Rahul K P

基本的な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        
6
Israel Unterman

Docs.python.org/3/library/functions.html#Zip(cdarkeによって提供されるリンク)にアクセスした後

私は必要な解決策を見つけることができました:

zipメソッドを使用して、関連データの新しい要約リストを作成しました。

# sort into rows of associated data and convert to list
rows = Zip(names, weights, costs, unit_costs)
summary = list(rows)

新しい要約リストを取得したら、テーブルを並べ替えてユーザーに出力しました(ただし、後で書式設定を処理します)。

# 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    

助けてくれたcdarkeに感謝します:)

0
Jake Cannon