items은 튜플의 목록입니다. 튜플이 정렬된 경우 Python의 내장 함수 sorted(또는 sort)는 튜플의 마지막 요소, 즉 두 요소의 집합에서 정렬합니다. 튜플은 두 가지 기본 정렬로 상상할 수 있습니다:
원래:
으아악
첫 번째 정렬에서는 두 번째 요소를 키로 사용하므로 정렬 결과는 다음과 같습니다.
으아악
두 번째 정렬에서는 첫 번째 요소를 키로 사용하므로 정렬 결과는 다음과 같습니다.
으아악
결론(1):
튜플 정렬은 마지막 요소부터 앞으로 정렬됩니다 즉, 튜플의 정렬 가중치는 첫 번째 요소부터 시작하여 뒤로 감소합니다
그런 다음 부울 값의 정렬을 살펴보겠습니다.
으아악
결과:
으아악
결론 2:
부울 정렬은 False를 앞쪽에, True를 아래쪽에
배치합니다.
그럼 예시를 살펴보고 결과를 관찰할 수 있는 간단한 함수를 작성해 보겠습니다.
으아악
함수 show는 정렬 중에 각 문자에 대한 튜플 키를 생성하는 데 사용되는 현재 문자열 s을 인쇄합니다.
그런 다음 방금 결론 1을 적용합니다. 튜플을 키로 사용하는 대신 등가 를 사용하여 마지막 요소부터 앞으로 키를 정렬하고 점차적으로 s 및 튜플 변경 사항을 관찰합니다. 핵심:
으아악
예상대로 결론 (1)에 따르면 이 접근 방식은 실제로 튜플을 키로 한 번에 정렬하는 것과 동일하다는 것을 알 수 있습니다. 동시에 결론(2)을 관찰하면 isdigit(), isupper(), islower() 등에 의해 생성된 부울 키에 대한 정렬 결과도 예상대로입니다.
으아악
하지만 이것이 최종 결론은 아니라고 생각합니다. 우연의 결과이기 때문입니다(일어났다고 하기에는 지나친 일일 수도 있고, 덜 직관적인 결과라고 해야 할 것입니다). 를 토대로 결론을 내리겠습니다. 결론 (1) 원본 예 분석:
으아악
이 정렬을 다음과 같이 번역할 수 있습니다.
먼저 x 문자 자체를 정렬한 다음, 소문자인지, 대문자인지, 짝수인지, 숫자인지를 정렬합니다.
은 다음과 같이 번역할 수도 있습니다.
문자가 숫자인지 여부를 가장 높은 정렬 가중치로 사용한 다음 문자가 짝수인지, 대문자인지, 소문자인지, 문자 x 자체를 사용합니다. 무게.
이것은 초기 목표(#Sort: 소문자-대문자-홀수-짝수)와 다른 것으로 보이지만 적어도 목표와 직관적인 대응은 없습니다.
다음으로 변경하는 것이 좋습니다.
으아악
이는 다음과 같이 해석될 수 있습니다.
문자가 소문자인지 여부를 가장 큰 가중치로 사용하고, 문자가 대문자인지, 문자가 홀수인지, 문자 x 자체를 정렬 가중치로 사용합니다
흥미로운 점은 판단 공식이 True인 문자를 정렬이 완료된 후 이전 위치와 비교하기를 원하므로 결론 (2)에 따라 not을 추가하여 일치하는 항목이 되도록 합니다. 문자가 앞에 있을 수 있습니다.
핵심은 donghui의 말대로 FALSE<TRUE입니다. key는 튜플의 정렬 상황입니다. 정렬할 각 요소는 튜플을 생성합니다(x.isdigit(), x.isdigit() and int(x) % 2 == 0, x.isupper(), x.islower(), x). 정렬은 이 튜플을 기반으로 하며, false가 첫 번째 순위이고 true가 마지막 순위입니다. 똑같습니다. 다음을 참조하세요. sorted는 궁극적으로 정렬이 필요한 요소를 반환합니다.
튜플의 첫 번째 값을 먼저 비교하고, FALSE<TRUE이고, 같으면 튜플의 다음 값을 비교하는 식입니다.
간단한 예부터 시작해 보겠습니다.
으아악결과:
으아악items
은 튜플의 목록입니다. 튜플이 정렬된 경우 Python의 내장 함수sorted
(또는sort
)는 튜플의 마지막 요소, 즉 두 요소의 집합에서 정렬합니다. 튜플은 두 가지 기본 정렬로 상상할 수 있습니다:원래:
으아악첫 번째 정렬에서는 두 번째 요소를 키로 사용하므로 정렬 결과는 다음과 같습니다.
으아악두 번째 정렬에서는 첫 번째 요소를 키로 사용하므로 정렬 결과는 다음과 같습니다.
으아악결론(1):
튜플 정렬은 마지막 요소부터 앞으로 정렬됩니다
즉, 튜플의 정렬 가중치는 첫 번째 요소부터 시작하여 뒤로 감소합니다
그런 다음 부울 값의 정렬을 살펴보겠습니다.
으아악결과:
으아악결론 2:
부울 정렬은
배치합니다.False
를 앞쪽에,True
를 아래쪽에그럼 예시를 살펴보고 결과를 관찰할 수 있는 간단한 함수를 작성해 보겠습니다.
으아악함수
show
는 정렬 중에 각 문자에 대한 튜플 키를 생성하는 데 사용되는 현재 문자열s
을 인쇄합니다.그런 다음 방금 결론 1을 적용합니다. 튜플을 키로 사용하는 대신 등가 를 사용하여 마지막 요소부터 앞으로 키를 정렬하고 점차적으로
으아악s
및 튜플 변경 사항을 관찰합니다. 핵심:예상대로 결론 (1)에 따르면 이 접근 방식은 실제로 튜플을 키로 한 번에 정렬하는 것과 동일하다는 것을 알 수 있습니다.
으아악동시에 결론(2)을 관찰하면
isdigit()
,isupper()
,islower()
등에 의해 생성된 부울 키에 대한 정렬 결과도 예상대로입니다.하지만 이것이 최종 결론은 아니라고 생각합니다. 우연의 결과이기 때문입니다(일어났다고 하기에는 지나친 일일 수도 있고, 덜 직관적인 결과라고 해야 할 것입니다). 를 토대로 결론을 내리겠습니다. 결론 (1) 원본 예 분석:
으아악이 정렬을 다음과 같이 번역할 수 있습니다.
은 다음과 같이 번역할 수도 있습니다.
이것은 초기 목표(#Sort: 소문자-대문자-홀수-짝수)와 다른 것으로 보이지만 적어도 목표와 직관적인 대응은 없습니다.
다음으로 변경하는 것이 좋습니다.
으아악이는 다음과 같이 해석될 수 있습니다.
흥미로운 점은 판단 공식이
True
인 문자를 정렬이 완료된 후 이전 위치와 비교하기를 원하므로 결론 (2)에 따라not
을 추가하여 일치하는 항목이 되도록 합니다. 문자가 앞에 있을 수 있습니다.핵심은
donghui
의 말대로 FALSE<TRUE입니다.key는 튜플의 정렬 상황입니다. 정렬할 각 요소는 튜플을 생성합니다
(x.isdigit(), x.isdigit() and int(x) % 2 == 0, x.isupper(), x.islower(), x)
. 정렬은 이 튜플을 기반으로 하며, false가 첫 번째 순위이고 true가 마지막 순위입니다. 똑같습니다. 다음을 참조하세요. sorted는 궁극적으로 정렬이 필요한 요소를 반환합니다.테스트 코드는 다음과 같습니다. (
으아아아dokelung
및donghui
에서)입력을 실행하고 확인하여 패턴을 발견하세요.
으아아아출력: