복붙노트

[PYTHON] 문자열의 일부로 문자열 목록 정렬

PYTHON

문자열의 일부로 문자열 목록 정렬

다음과 같은 형식의 문자열 목록이 있습니다.

['variable1 (name1)', 'variable2 (name2)', 'variable3 (name3)', ...]

... 그리고 알파벳순으로 (nameX) 부분을 기반으로 목록을 정렬하고 싶습니다. 이 일을 어떻게 하죠?

해결법

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

    1.정렬 키를 변경하려면 키 매개 변수를 사용하십시오.

    정렬 키를 변경하려면 키 매개 변수를 사용하십시오.

    >>>s = ['variable1 (name3)', 'variable2 (name2)', 'variable3 (name1)']
    >>> s.sort(key = lambda x: x.split()[1])
    >>> s
    ['variable3 (name1)', 'variable2 (name2)', 'variable1 (name3)']
    >>> 
    

    정렬 방식과 동일한 방식으로 작동합니다.

    >>>s = ['variable1 (name3)', 'variable2 (name2)', 'variable3 (name1)']
    >>> sorted(s)
    ['variable1 (name3)', 'variable2 (name2)', 'variable3 (name1)']
    >>> sorted(s, key = lambda x: x.split()[1])
    ['variable3 (name1)', 'variable2 (name2)', 'variable1 (name3)']
    >>> 
    

    이 질문에 설명 된 것처럼 알파벳순 정렬이므로 2 자리 구성 요소의 경우 숫자로 해석하지 않습니다. "11"은 "2"앞에옵니다.

  2. ==============================

    2.해결책은 다음과 같습니다.

    해결책은 다음과 같습니다.

    sorted(b, key = lambda x: x.split()[1])
    

    왜? 목록을 정렬 (b라고 함)하려고합니다. 열쇠로서 우리는 이름 (X)을 사용할 것입니다. 여기서는 항상 앞에 공백이 있다고 가정하므로 목록의 항목을 두 개로 나눠서 두 번째 항목에 따라 정렬합니다.

  3. ==============================

    3.당신은이 정규식을 사용할 수 있습니다 :

    당신은이 정규식을 사용할 수 있습니다 :

    >>> import re
    >>> r = re.compile(r'\((name\d+)\)')
    >>> lis = ['variable1 (name1)', 'variable3 (name3)', 'variable2 (name100)']
    >>> sorted(lis, key=lambda x:r.search(x).group(1))
    ['variable1 (name1)', 'variable2 (name100)', 'variable3 (name3)']
    

    위의 코드는 name3 이전에 name100과 같은 것을 반환합니다. 원하지 않으면 다음과 같이해야합니다.

    >>> r = re.compile(r'\(name(\d+)\)')
    def key_func(m):
        return int(r.search(m).group(1))
    
    >>> sorted(lis, key=key_func)
    ['variable1 (name1)', 'variable3 (name3)', 'variable2 (name100)']
    
  4. ==============================

    4.sort 메소드의 key 매개 변수 만 사용하면됩니다.

    sort 메소드의 key 매개 변수 만 사용하면됩니다.

    test.sort(key = lambda x: x.split("(")[1])
    

    행운을 빕니다!

    편집 : 테스트는 배열입니다.

  5. from https://stackoverflow.com/questions/21431052/sort-list-of-strings-by-a-part-of-the-string by cc-by-sa and MIT license