2017-11-04 4 views
1
import sys 
for line in sys.stdin.read() : 
    numbers = line.split() 
    print numbers 

私はsplit()をpythonで使用しているときに何が起こっているのか把握しようとしています。私が読んだことに基づいて、引数なしで、それは空白で分割し、行を文字列のリストに分割します。 私はpythonのstdinでsplit()を使用しようとしています

1 100 
2 32 
3 76 

に似入力して(より大きなプログラムに間違って何が起こっているかを把握しようとするために、これを使用して)このコードの(小さな)スニペットを実行すると、私が手:

['1'] 
[] 
['1'] 
['0'] 
['0'] 
[] 
['2'] 
[] 
['3'] 
['2'] 
[] 
['3'] 
[] 
['7'] 
['6'] 
[] 

私は私は個々の文字に各要素を分割している理由を理解できるかどうかを調べるために、split()、( '')、引数なしで( '\ n')を含むいくつかの引数を試しました。私はまた、1行に2つの別々の単語の入力を使用しようとし、同様の出力を得ました。

私の質問は次のとおりです。ホワイトスペースではなく、各文字の後に分割するのはなぜですか?

+0

問題は、問題は問題であることを 'split'ないのchar –

+2

することにより、入力文字を読んでいる分割されていません。あなたは文字列である 'read()'の* result *を反復処理します。だから、あなたは文字を繰り返します。 –

+0

ああ、それははるかに理にかなっています。私は実際には、上記の行の後に印刷して、今すぐ見ることができます。私は入力を処理するためにread()以外のものを探す必要があります。私はread()を外して、正しい方向に向かっていると思う – sjtlgs

答えて

1
for line in sys.stdin.read() : 

sys.stdinは入力ストリームです。 read()を使用すると、入力を文字列として読み取ることになります。文字列を反復すると、行ではなく単一の文字が得られます。だからlineはcharです。つまり、splitは機能しません。効果はありません。

修正がちょうど行ずつ生成され、stdinに反復される:

for line in sys.stdin: 
    numbers = line.split() 
    print numbers 
関連する問題