티스토리 뷰

Python

natural sorting

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']


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


댓글
댓글쓰기 폼
공지사항
Total
410,566
Today
1
Yesterday
29
«   2019/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        
글 보관함