9장 연습 문제 3번, 4번, 5번

파일 s.txt 에 주어진 단어를 정렬하는 문제이다. 파일에 주어진 단어는
pig ham
cat dog
ham bird
dog pig
이다.


3번 문제는 일단 첫번째 단어를 기준으로 정렬하는 것이다. 정렬 후
cat dog
dog pig
ham bird
pig ham
이 되어야 한다.

3번 문제는 간단하게 라인 단위로 나눈 리스트를 그냥 정렬하면 바로 정렬이 된다.
>>> f = open('d:/s.txt')
>>> print '\n'.join(sorted(f.read().split('\n')))
위와 같이 코딩 하면 간단하게 정렬이 된다.


4번은 두번째 단어를 기준으로 정렬하는 문제이다. 이를 해결하는 방법이 리스트에서 이미 나왔다.
>>> f = open('d:/s.txt')
>>> def mycmp(a1,a2) :
    return cmp(a1.split()[1], a2.split()[1])
>>> print '\n'.join(sorted(f.read().split('\n'), mycmp))
와 같이 코딩하면 두번째 단어로 정렬을 할 수 있다.

이보다 더 간단히 정렬하는 방법도 있는데, 람다 함수를 이용하여 두번째 단어를 sorted 함수의 키(key)로 넘겨주는 방법이다. 이 방법은 http://cherrykyun.tistory.com/341 를 참고 바란다.


5번은 한 줄에 3개의 단어가 오도록 만드는 문제이다. 출력 후
pig ham cat
dog ham bird
dog pig
와 같이 출력이 되어야 한다.

이를 해결하는 방법으로 여러가지가 있겠지만 나는 아래와 같은 방법을 사용했다.
>>> f = open('d:/s.txt')
>>> L = ' '.join(f.read().split('\n')).split()
>>> for k in range(len(L)) :
    print L[k]
    if not (k+1)%3 :
        print
주어진 단어를 라인 별로 분리를 한다음 다시 공백으로 묶은 뒤 공백으로 분리를 한 리스트를 만들었다.

그렇게 만든 리스트의 단어를 3번마다 라인을 분리 시켰다.

댓글 없음:

댓글 쓰기

크리에이티브 커먼즈 라이선스