상세 컨텐츠

본문 제목

natural sorting

Python

by techbard 2012. 5. 9. 11:15

본문

반응형

0 - 1 - 9 - a - z 순서의 기계적인 소팅이외에 사람이 이해하는 소팅을 구현할 필요가 있어서, 구글링을 좀 해봤더니, 이미 많은 사람이 구현해 놓은 좋은 snnipet이 있었다. 정규식 모듈 임포트 없이 구현한게 짱인듯... 이해는 안 된다. 왜 이런 결과가 나오는지... -_-


def naturalsort(string):

        '''A natural sort helper function for sort() and sorted()

        without using regular expression.

        '''

        r = []

        for c in string:

            if c.isdigit():

                if r and isinstance(r[-1], int):

                    r[-1] = r[-1] * 10 + int(c)

                else:

                    r.append(int(c))

            else:

                r.append(c)

        return r


mylist = ['1:5', '1:15', '1:2', '1:3', '1:4', '2:3', '11:2']

print (sorted(mylist, key = naturalsort))


========================================================

실행결과)


['1:2', '1:3', '1:4', '1:5', '1:15', '2:3', '11:2']


어딘가에서 보고 베껴놓은 건데, 잘 동작한다.


반응형

관련글 더보기

댓글 영역