2016-05-11 6 views
0

私のコード出力わずか数行の出力ファイルに角括弧が含まれているのはなぜですか?

with open('base.txt') as infile: 
    r = [map(float, line.split()) for line in infile] 

r1=r[::3] 
r2=tuple(r1) 

with open('newindex1.txt') as infile: 
    i = [map(int, line.split()) for line in infile] 

a2 = zip(*i) 
a11 = a2[0] 
a12 = a2[1]  

with open('in.txt','w') as file: 
    for index in range(len(r2)): 
      file.write(str(a11[index]) + " " + str(a12[index])+ " " + str(r2[index]) + "\n") 

in.txt

0 0 [1.2] 
1 0 [1.2] 
2 0 [1.2] 
3 0 [1.2] 
4 0 [1.2] 
5 0 [1.2] 
6 0 [1.2] 
7 0 [1.2] 
8 0 [1.2] 
9 0 [1.2] 

newindex1.txt

0 0 
1 0 
2 0 
3 0 
4 0 
5 0 
6 0 
7 0 
8 0 
9 0 

base.txt

1.200000e+00 
1.200000e+00 
1.200000e+00 
1.200000e+00 
1.200000e+00 
1.200000e+00 
1.200000e+00 
1.200000e+00 
1.200000e+00 
1.200000e+00 

リストをタプルに変換しました。なぜ私は括弧を持っていますか?どのようにそれらを取り除く?

+0

(なぜ 'in.txt'が出力ファイルなのですか)あなたの入力ファイルも少し表示できますか? –

+1

'r'はリストのリストです。その(またはそのサブセクションを)タプルに変換すると、リストのタプルが生成されます。それはあなたの出力に1要素のリストを織り込みます。 – Evert

+0

それは何を繰り返したいのですか?特定のアイテムのすべての行、またはファイル内のすべてのアイテム? –

答えて

4

リスト(明らかに1つの要素のリスト)をstr(r2[index])の文字列に変換するため、角括弧が表示されます。 問題を解決する最も簡単な方法は、唯一の要素を抽出することです。それをstr(r2[index][0])に変更します。

は私も

(例えば %.2f、偶然に、あなたの山車の control the formatにあなたを可能にする)は、文字列テンプレートであまりにも鈍い str演算子を置き換えることによって、あなたのコードより少ないエラーが発生しやすい(と、より読みやすい)にすることをお勧めします
with open('in.txt','w') as file: 
    for index in range(len(r2)): 
     line = "%d %d %f\n" % (a11[index], a12[index], r2[index][0]) 
     file.write(line) 

あなたはこのようにそれを行っていたと誤って[0]を忘れたい場合、あなたは(かなり便利)エラー得ているでしょう:あなたはまた、Yを簡素化することができ

TypeError: a float is required 

を私たちの入力とフロートの単純なリストとしてbase.txtを読んで;しかしあなたは数多くの数値行列を読んでいるようですが、私はあなたの一般的なアプローチに固執します。 (これを示唆すると、あなたは暗い色を覗かなければなりません.2次元の配列はこのようなものに必要なものです)

+0

どうすればいいですか? –

+1

うまく動作します。 –

0

リストの各インデックスrlistです。あなたがここにr内の任意の値にr2を設定するときに:あなたが設定している

r1=r[::3] 
r2=tuple(r1) 

r2は、リストの値を持つタプルであることを。リストのstr()は、かっこで何かを印刷します。

関連する問題