관련 무료 학습 권장사항: python 비디오 튜토리얼
Python 목록 정렬 list.sort 메서드 및 내장 함수 정렬
목록을 얻은 후 여러 번 목록은 다음과 같습니다. 아니 우리의 요구를 충족시키기 위해 필요한 것은 특별한 순서의 목록입니다.
이때 list.sort 메소드와 내장 함수 sorted를 사용할 수 있습니다. 이 글에서는 목록의 사용법과 차이점을 소개합니다. sort 메소드와 정렬 내장 함수.
1. List.sort 메소드
list.sort 메소드는 목록을 제자리에 정렬하므로 원본 목록의 복사본을 만들지 않습니다. 이것이 이 메서드의 반환 값이 None인 이유이며, 이 메서드는 새 목록을 생성하지 않는다는 점을 상기시켜 줍니다.
이 경우 None을 반환하는 것은 실제로 Python의 관례입니다. 함수나 메서드가 객체를 제자리에서 변경하는 경우 전달된 매개 변수가 변경되었음을 호출자에게 알리기 위해 None을 반환해야 하며 새 객체가 생성되지 않습니다.
코드를 살펴보겠습니다.
# coding=utf-8 list_a = [1, 2, 8, 3, 7, 9, 5, 7] # sort()方法没有返回值 list_b = list_a.sort() print("list_a: ", list_a) print('list_b: ', list_b)
실행 결과:
list_a: [1, 2, 3, 5, 7, 7, 8, 9] list_b: None
현재 변경 사항을 나타내기 위해 None을 반환하는 것은 이 규칙에 단점이 있습니다. 즉, 호출자가 이를 연결할 수 없습니다. 반대로, 새 객체를 반환하는 메서드를 연결하여 일관된 인터페이스를 형성할 수 있습니다.
2. Sorted 내장 함수
list.sort와 달리 sorted 내장 함수는 반환 값으로 새 목록을 생성합니다.
이 메서드는 모든 형태의 반복 가능한 객체, 심지어 불변 시퀀스나 생성기를 매개변수로 받아들일 수 있으며, sorted가 어떤 매개변수를 받아들이든 상관없이 최종적으로 목록을 반환합니다.
코드 예:
list_c = [1, 2, 8, 3, 7, 9, 5, 7] # sorted内置函数会返回一个排序后的新列表 list_d = sorted(list_c) print("list_c: ", list_c) print('list_d: ', list_d)
실행 결과:
list_c: [1, 2, 8, 3, 7, 9, 5, 7] list_d: [1, 2, 3, 5, 7, 7, 8, 9]
내장 함수 sorted를 사용하면 원래 목록은 변경되지 않은 채 새 목록이 반환되는 것을 볼 수 있습니다.
두 가지 이점이 있습니다.
1. 원본 목록과 정렬된 목록을 모두 사용해야 하거나 목록이 아닌 반복 가능한 개체를 목록으로 정렬하려는 경우 sorted를 사용하면 됩니다.
2. 반환 값이 있으면 연쇄 호출을 할 수 있습니다
# 可以对非列表的可迭代对象排序生成列表 str_e = 'python' list_e = sorted(str_e) print(list_e) # 链式调用 str_f = '-'.join(sorted(str_e)).upper().split('-') print(str_f)
작업 결과:
['h', 'n', 'o', 'p', 't', 'y'] ['H', 'N', 'O', 'P', 'T', 'Y']
3. 키워드 매개 변수 key 및 reverse
list.sort 메서드인지 정렬 함수인지 두 가지를 사용할 수 있습니다. 키워드 매개변수:
key:
는 매개변수가 하나만 있는 함수를 받습니다. 이 함수는 시퀀스의 각 요소에 사용되며 결과는 정렬 알고리즘이 의존하는 비교 키가 됩니다.
예를 들어 일부 문자열을 정렬할 때 key=str.lower를 사용하여 대소문자를 무시하고 정렬하거나 key=len을 사용하여 문자열 길이를 기준으로 정렬할 수 있습니다. key의 기본값은 항등 함수입니다. 즉, 요소 자체의 값이 기본적으로 정렬에 사용된다는 의미입니다.
reverse:
True로 설정하면 정렬된 순서의 요소가 내림차순으로 출력됩니다(즉, 최대값이 최소값으로 정렬됩니다). reverse의 기본값은 False입니다.
phone = ('HUAWEI', 'OPPO', 'MI', 'MEIZU', 'VIVO') # 按长度进行排序 phone_list = sorted(phone, key=len) print(phone_list) phone_list_re = sorted(phone, key=len, reverse=True) print(phone_list_re)
실행 결과:
['MI', 'OPPO', 'VIVO', 'MEIZU', 'HUAWEI'] ['HUAWEI', 'MEIZU', 'OPPO', 'VIVO', 'MI']
위 코드에서 첫 번째 정렬은 길이별로 정렬된 새 문자열 목록을 생성합니다. 두 번째 정렬은 길이별 정렬을 오름차순에서 내림차순으로 변경하는 것입니다.
조심하면 두 번째 결과가 첫 번째 정렬 결과의 완전한 반전이 아니라는 것을 알 수 있습니다.
OPPO와 VIVO의 길이는 모두 4입니다. reverse=True 이후의 상대 위치는 첫 번째 정렬과 동일합니다. 그 이유는 무엇입니까?
sorted와 list.sort의 정렬 알고리즘은 모두 Timsort입니다. 이는 원본 데이터의 순서 특성을 기반으로 삽입 정렬과 병합 정렬
을 번갈아 사용하여 최고의 효율성을 달성하는 적응형 알고리즘입니다.
Python의 정렬 알고리즘 Timsort는 안정적입니다. 즉, 두 요소의 크기가 비교할 수 없을지라도 각 요소의 상대적 위치는 각 정렬 결과에서 고정됩니다.
사용된 정렬 알고리즘은 안정적이기 때문에, 즉 길이가 동일할 때 OPPO와 VIVO의 상대적인 위치는 변하지 않습니다.
이제 list.sort() 메서드와 내장 함수 정렬을 마스터했습니다~
관련 무료 학습 권장사항: python tutorial(동영상)
위 내용은 Python 소개 list.sort 메소드 및 내장 함수 정렬의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!