2016-10-24 3 views
0

私は行の代わりに列に書き込もうとしているリストのリストを持っています。リストは行ではなく列に整理されます

['31 32 31 8', '31 31 32 8', '31 31 31 8', '31 32 31 31'] 

私はそれがこのようllokしたい:私のリストは次のようになり、私が望む何

with open("text.csv", 'w') as f: 
    for x in zip(contents): 
     f.write('\t'.join(x)+'\n') 

31 31 31 31 
32 31 31 32 
31 32 31 31 
8 8 8 31 

私はこのような行での素敵なプリントを得ることができますこのデータを列で取得することです

+1

を返す test[:,0]を言って最初の列にアクセスすることができます。 – mhawke

+0

便利なこと:列のリストがあり、行のリストが必要な場合は、 'zip(* old_list)'を実行することでスワップできます。例えばzip(* [(1,3,5,7)、(2,4,6,8)])→[(1,2)、(3,4)、(5,6) 8)] ' –

答えて

2

これにはzip()を使用できます。まずの文字列のリストをのリストのリストをstr.split()を使用して変換し、次にzip edリストを使用して繰り返します。あなたはzip()と形状にそれをマッサージしたら

>>> my_list = ['31 32 31 8', '31 31 32 8', '31 31 31 8', '31 32 31 31'] 
>>> my_list_list = [s.split() for s in my_list] 
>>> for item in zip(*my_list_list): 
...  print item 
... 
('31', '31', '31', '31') 
('32', '31', '31', '32') 
('31', '32', '31', '31') 
('8', '8', '8', '31') 
+0

完璧!輸入なしでさらに良い – badner

1

が出力するデータをcsvモジュールを使用します:以下のサンプルコードは、これのようにタブを使用してCSVファイルになり

import csv 

# data is a list of lists  
data = [s.split() for s in ['31 32 31 8', '31 31 32 8', '31 31 31 8', '31 32 31 31']] 

with open('text.csv', 'w') as f:  
    writer = csv.writer(f, delimiter='\t') 
    writer.writerows(zip(*data)) 

このようになります区切り文字は:

 
31 31 31 31 
32 31 31 32 
31 32 31 31 
8 8 8 31 
1

また、numpyは、原料のこの種のために本当に良いです。あなたは
test = numpy.array([[31,32,31,8], [31,31,32,8], [31,31,31,8], [31,32,31,31]]
を持っている場合
その後、あなたは文字列のリストではなく、リストのリストがある持っている何array([31, 31, 31, 31])

関連する問題