以下に示すように、ループで収集され、同じデータ型のみ(たとえば、文字列のみ、フロートのみ)を保持する個別のリストの下に保存されるデータがあります。
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)。
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
。
基本的な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
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に感謝します:)