>백엔드 개발 >파이썬 튜토리얼 >Python 소개 list.sort 메소드 및 내장 함수 정렬

Python 소개 list.sort 메소드 및 내장 함수 정렬

coldplay.xixi
coldplay.xixi앞으로
2021-01-18 17:11:343595검색

Python 소개 list.sort 메소드 및 내장 함수 정렬

관련 무료 학습 권장사항: 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 csdn.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제