복붙노트

[PYTHON] 안에있는 문자열을 올바르게 정렬하는 방법? [복제]

PYTHON

안에있는 문자열을 올바르게 정렬하는 방법? [복제]

숫자가 포함 된 문자열 목록이있어서이를 정렬하는 좋은 방법을 찾을 수 없습니다. 예를 들어 나는 다음과 같은 것을 얻는다 :

something1
something12
something17
something2
something25
something29

sort () 메소드로.

어떻게 든 번호를 추출한 다음 목록을 정렬해야 할 필요가 있지만 가장 간단한 방법으로 어떻게해야하는지 잘 모를 것입니다.

해결법

  1. ==============================

    1.아마도 인간 정렬 (자연 정렬이라고도 함)을 찾고 있습니다.

    아마도 인간 정렬 (자연 정렬이라고도 함)을 찾고 있습니다.

    import re
    
    def atoi(text):
        return int(text) if text.isdigit() else text
    
    def natural_keys(text):
        '''
        alist.sort(key=natural_keys) sorts in human order
        http://nedbatchelder.com/blog/200712/human_sorting.html
        (See Toothy's implementation in the comments)
        '''
        return [ atoi(c) for c in re.split('(\d+)', text) ]
    
    alist=[
        "something1",
        "something12",
        "something17",
        "something2",
        "something25",
        "something29"]
    
    alist.sort(key=natural_keys)
    print(alist)
    

    산출량

    ['something1', 'something2', 'something12', 'something17', 'something25', 'something29']
    

    추신. Toothy가 자연 정렬 작업을 사용하기 위해 내 대답을 변경했습니다 (원래 주석보다 훨씬 빠르기 때문에 여기에 주석에 게시).

    실수로 텍스트를 정렬하려면 정수 (즉, (\ d +))와 일치하는 정규식을 실수와 일치하는 정규식으로 변경해야합니다.

    import re
    
    def atof(text):
        try:
            retval = float(text)
        except ValueError:
            retval = text
        return retval
    
    def natural_keys(text):
        '''
        alist.sort(key=natural_keys) sorts in human order
        http://nedbatchelder.com/blog/200712/human_sorting.html
        (See Toothy's implementation in the comments)
        float regex comes from https://stackoverflow.com/a/12643073/190597
        '''
        return [ atof(c) for c in re.split(r'[+-]?([0-9]+(?:[.][0-9]*)?|[.][0-9]+)', text) ]
    
    alist=[
        "something1",
        "something2",
        "something1.0",
        "something1.25",
        "something1.105"]
    
    alist.sort(key=natural_keys)
    print(alist)
    

    산출량

    ['something1', 'something1.0', 'something1.105', 'something1.25', 'something2']
    
  2. from https://stackoverflow.com/questions/5967500/how-to-correctly-sort-a-string-with-a-number-inside by cc-by-sa and MIT license