2013-11-25 5 views
1

첫 번째 질문 다음과 같은 형식의 입력했다 : codeforces 문제 나 탑 코더를 수행 할 때 일반적으로여러 테스트 케이스 표준 입력 (파이썬) 올해의 페이스 북 해커 컵의

3 #number of test cases 
4 #number of rows of test case 1 
. . . x 
. . x x 
. . x x 
. . . x 
2 #number of rows of test case 2 
. . x x 
. . x x 
3 #number of rows of test case 3 
x x . . 
x x . . 
. . . x 

을, 당신이 입력 5 테스트 케이스에없는 서로 후에, 당신은 하나를 위해 그것을 만들고, 그들은 20-25의 테스트 케이스를 통해 그것을 실행합니다.

나는이 데이터를 조작 가능하게 만들기 위해 많은 노력을 기울 였고 어떻게해야하는지 궁금해하고있었습니다.

, 단지

5 
2 3 4 5 6 

I가 제 번호를 얻는 입력()를 사용할 수 있다면, 그리고

import sys 
data = [] 
for line in sys.stdin: 
    y = [int(x) for x in line.split()] 
    data.append(y) 

나머지를 조작한다. 이 문제 (int를 str로 대체)에 대해 이와 같이하면, [3,4, data, 2, data, 3, data]와 같은 하나의 배열로 끝나기가 어려워 보인다.

stdin에서 여러 테스트 케이스를 읽으려면 어떻게해야합니까? (질문 자체가 그다지 특이하지 않기 때문에 도움이되는 일반적인 답조차도)

답변

1

나는 이것을 발전기에 넣는 경향이있다. 예를 들어 :

import sys 

def read_data(source): 
    N = int(next(source)) 
    for case in range(N): 
     num_rows = int(next(source)) 
     rows = [next(source).split() for i in range(num_rows)] 
     yield rows 

for case in read_data(sys.stdin): 
    print case 

소스가 표준 입력이나 파일, 또는 어떤 경우

[email protected]:~/coding$ cat source.txt | python getdata.py 
[['.', '.', '.', 'x'], ['.', '.', 'x', 'x'], ['.', '.', 'x', 'x'], ['.', '.', '.', 'x']] 
[['.', '.', 'x', 'x'], ['.', '.', 'x', 'x']] 
[['x', 'x', '.', '.'], ['x', 'x', '.', '.'], ['.', '.', '.', 'x']] 

이 방법은 데이터 판독기는 상관하지 않는다, 당신이 그것을 주석을 제거 뭔가를 전달할 수 생산 필요하다면.