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

저는 split()을 파이썬으로 사용할 때 무슨 일이 일어나는지 알아 내려고했습니다. 인자를 사용하지 않고 읽은 것을 바탕으로, 공백으로 나뉘며 줄을 문자열 목록으로 나눕니다. 나는이 코드 (작은) 조각을 실행하면 는python에서 stdin에 split()을 사용하려고 시도했습니다.

1 100 
2 32 
3 76 

유사한 입력을 (더 큰 프로그램에서 잘못된 무슨 일이 일어나고 있는지 알아 내려고 시도하려면이 옵션을 사용하여) 내가 얻을 :

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

I을 ('')를 포함하여 split()에서 두 개의 인수를 시도했으며 각 요소를 개별 문자로 분할하는 이유를 알아낼 수 있는지 알아보기 위해 인수도 사용하지 않았습니다 ('\ n'). 또한 한 줄에 두 개의 단어를 입력 해 보았는데 비슷한 결과가 나왔습니다.

내 질문은 : 왜 이것이 공백이 아닌 각 문자 뒤에 나뉘어지는 것입니까?

+0

문제가 문제가'문제가 있음을 split'되지 않는 문자 –

+2

에 의해 입력 문자를 읽고 분할되지 않습니다

수정은 선으로 선을 산출하는 stdin에 반복된다. 문자열 인'read()'의 * 결과 *를 반복합니다. 그래서 캐릭터를 반복합니다. –

+0

아, 그건 훨씬 의미가 있습니다. 나는 실제로 그것을 위의 줄 다음에 인쇄 했으므로 이제 볼 수 있습니다. 입력을 처리하기 위해 read() 이외의 다른 것을 찾아야 할 것이다. 나는 read()를 없애고 이것이 올바른 방향으로 가고 있다고 생각한다. – sjtlgs

답변

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

sys.stdin은 입력 스트림입니다. read()을 사용하면 입력을 문자열로 읽게됩니다. 문자열을 반복하면 줄이 아닌 단일 문자가됩니다. 따라서 line은 char입니다. 어떤 split 작동하지 않습니다/효과가 있다고 설명합니다.

for line in sys.stdin: 
    numbers = line.split() 
    print numbers