2016-07-14 9 views
2

私はいくつかのデータをforループを通して反復した後に整列させるのに苦労しています。私はループ出力のためにそれぞれ別の列を持っているが、これを達成する方法を理解することに失敗したい。私は新しい行にend = ''で終わってみましたが、次の列を先頭に戻しません。あなたは助けてもらえますか?以下は、ビルドしようとしているコードのテスト可能な例です。あなたの助けがよろしくです。Pythonの列を並べて印刷

import time, re, collections, operator 

output_list = [['2016-07-12', 'Magazine', 'News Paper #2', 'Podcast', '1234567', '10-10-10-10', 'ABCDEFG', 'Zoo'], 
['2016-07-12', 'Book', 'News Paper #2', 'Podcast', '1234567', '10-10-10-10', 'ABCDEFG', 'Zoo'], 
['2016-07-13', 'Book', 'News Paper #2', 'Podcast', '1234567', '10-10-10-10', 'ABREF', 'Zoo'], 
['2016-07-14', 'Article', 'News Paper #4', 'Radio', '1234567', '10-10-10-10', 'ABCDEFG', 'Zoo'], 
['2016-07-15', 'Article', 'News Paper #4', 'Radio', '1234567', '10-10-10-10', 'ABCDEFG', 'Zoo'], 
['2016-07-15', 'Snippet', 'News Paper #2', 'Podcast', '1234567', '10-10-10-10', 'ABCDEFG', 'Zoo']] 


def count_types(): 
    #item_1 = mm_counts(0) 
    item_2 = mm_counts(1) 
    item_3 = mm_counts(2) 
    item_4 = mm_counts(3) 
    item_5 = mm_counts(4) 
    item_6 = mm_counts(5) 
    item_7 = mm_counts(6) 
    item_8 = mm_counts(7) 

print('=' * 90) 
print(('Media1 Media2 Media3 Media4 Media5 Media6 Media7')) 
print('=' * 90) 
def mm_counts(a): 
    r = [] 
    for i in output_list: 
     x = (i[a]) 
     r.append(x) 
    y = collections.Counter(r) 

    padding = 9 
    for k, v in sorted(y.items(), key=operator.itemgetter(1), reverse=True): 
     z = (str(k).ljust(13, ' ') + ' ' + (str(v).ljust(5, ' '))) 
     print (z) 

count_types() 

電流出力:

========================================================================================== 
Media1 Media2 Media3 Media4 Media5 Media6 Media7 
========================================================================================== 
Article  2  
Book   2  
Snippet  1  
Magazine  1  
News Paper #2 4  
News Paper #4 2  
Podcast  4  
Radio   2  
1234567  6  
10-10-10-10 6  
ABCDEFG  5  
ABREF   1  
Zoo   6  

所望の出力:

============================================================================================= 
Media1  Media2   Media3  Media4  Media5   Media6  Media7 
============================================================================================== 
Article 2 Magazine  1 Podcast 4 1234567 6 10-10-10-10 6 ABCDEFG 5 Zoo 6 
Book  2 News Paper #2 4 Radio 2    ABREF 1 
Snippet 1 News Paper #4 2  
Magazine 1 
+1

ことができますすべてのデータを最初に 'lists'に格納してから、' zip'して印刷します(またはそれらを一緒に繰り返す)? –

+0

'print_function'から' __future__ import print_function'を実行して、 'print(" ... "、end =" ")'を連続して実行すると、行が途切れることはありません。 [改行やスペースなしでPythonで印刷するには?](http://stackoverflow.com/questions/493386/how-to-print-in-python-without-newline-orspace) – mhoff

+1

@MichaelHoff、私は試しましたその行だけではなく、1行にすべての行が表示されます。それがあなたのために働いていれば、変更されたコードを投稿できますか? – MBasith

答えて

0

(フォーマット文字列の).format方法を使用することを学びます。フィールド長、左/中央/右揃え、小数点以下の桁数、数値の先行ゼロなどを指定することができます。 https://docs.python.org/3/library/string.html#formatspec

>>> kvp = [('Newspaper', 47), ('TV', 192), ('Radio', 543)] 
>>> fs = '{0[0]:>10s} {0[1]:6d}' 
>>> ' '.join([ fs.format(kv) for kv in kvp ]) 
' Newspaper  47   TV 192   Radio 543 ' 

そこに行くのはかなり。 fsはフォーマット文字列です。フォーマット文字列内の{...}は、フォーマットする項目をマークします。中括弧の中では、:の前にあるものは、何をフォーマットするのか、後のもの、どのようにフォーマットするのかを識別します。 0[0]0[1]は、.formatメソッドの最初の(ここでは唯一の)引数の最初と2番目の要素です(添字付きでなければなりません)。 >10sは10 6dのフィールド幅の文字列を右寄せ意味最後に6.

' '.join([ fs.format(kv) for kv in kvp ])のフィールド幅の10進整数を意味kvp(すなわち文字列)のフォーマットされた要素のリストを作成し、4つでそれら全てを連結しますそれらの間のスペース(ただし、4つの先頭または末尾のスペースはありません)。

(はい、これは部分的な答えである。私の質問では、「ALIGN」誤って解釈した場合に他の誰かが、出力の所望の行にフォーマットする正しい順序で右の実体を入れて答えることができる)

+0

お返事ありがとうございます。私もそれを試して、値が1つの項目だけであれば、テキストを整列させます。しかし、私は複数の値を反復しているので、列ごとに複数の値がある場合はうまくいきません。 – MBasith

+0

'.join'で私があなたに示したことはありませんか? 'kvp'はタプルのリストであり、リストは任意の長さです。それぞれのタプルは '.format'を介して(ここでは固定長の)文字列に変換され、これらのフォーマットされた文字列は結合されて1行の出力になります。問題が入力データを例の 'kvp'のようなものに並べ替える方法であるなら、私はその質問を完全にはっきりと見つけませんでした。注文しないことを重視してもう一度お尋ねください。 – nigel222

+0

さて、ごめんなさい、私は非常にPythonに新しいです。これは私が追加したものですが、それらを列に入れて達成しませんでした。私が間違っていることを教えてください。(y.items()、key = operator.itemgetter(1)、reverse = True): printでkvのために 'fs = '{0 [0]:> 10s} {0 [1]:6d} ( '' .join([fs.format(kv)])) ' – MBasith