> 백엔드 개발 > 파이썬 튜토리얼 > Python 정렬에 대한 간략한 토론

Python 정렬에 대한 간략한 토론

PHP中文网
풀어 주다: 2017-06-21 15:25:42
원래의
1213명이 탐색했습니다.

정렬에 대한 간략한 설명

정렬 함수는 프로그램에서 자주 사용됩니다. Python은 정렬 및 정렬 기능을 제공하는데, 하나는 제자리 정렬이고, 다른 하나는 정렬 후 새 결과를 반환하는 것입니다

1. 매개변수

함수 프로토타입:

sort([cmp[, key[, reverse]]])
로그인 후 복사
  • 은 정렬 방법이 세 개의 매개변수를 허용하며 모두 생략할 수 있음을 의미합니다.

  • 첫 번째 매개변수 cmp는 비교 함수입니다. 두 매개변수(목록의 요소)를 비교하는 방법은 무엇입니까? 정수와 같은 내장 유형을 비교하는 방법은 매우 직관적이지만 사용자 정의 비교에는 비교 함수를 정의하면 두 숫자가 같다는 의미인 0을 반환합니다. 음수를 반환하면 첫 번째 매개변수가 더 작다는 뜻이고 첫 번째 매개변수는 두 번째 매개변수보다 뒤처진다는 의미입니다. 매개변수.

  • 두 번째 매개변수 키는 목록 요소의 어떤 속성을 비교할 것인지입니다.

  • 세 번째 매개변수 reverse는 bool 유형으로, 역방향(역정렬) 여부를 의미합니다.

, cmp 매개변수 예:

#cmp 函数,两个数倒过来比较 注!只能在python2.0上运行
s = [1, 2, 3, 4, 5]
s.sort(cmp=lambda a, b:cmp(b, a))
print s
# [5, 4, 3, 2, 1]
로그인 후 복사

②, 자주 사용되는 매개변수 키, 역방향 사용 방법, 코드:

# key 指定排序方式  reverse 是否反排序

li = ['x11','abc323','e26','112ddd','fstgd2']

li.sort(key=len,reverse=True)    # 用长度进行排序,从大到小进行排序
print(li)
# ['abc323', '112ddd', 'fstgd2', 'x11', 'e26']

li.sort(key=lambda x:x[-1])     # key可以指定lambada函数x为列表中每个元素
print(li)                       # 元素的最后一个字符进行排序
# ['x11', 'fstgd2', 'abc323', 'e26', '112ddd']

li = zip(range(10),range(10)[::-1])  # 列表中元素为元祖是排序
print(li,type(li))
# <zip object at 0x000000E7F75504C8> <class &#39;zip&#39;>
li = list(li)
print(li)
# [(0, 9), (1, 8), (2, 7), (3, 6), (4, 5), (5, 4), (6, 3), (7, 2), (8, 1), (9, 0)]
li.sort(key=lambda x:x[-1])
print(li)
# [(9, 0), (8, 1), (7, 2), (6, 3), (5, 4), (4, 5), (3, 6), (2, 7), (1, 8), (0, 9)]

#**注!默认sort也是会对列表中元祖进行排序的
li.sort()
print(li)
# (0, 9), (1, 8), (2, 7), (3, 6), (4, 5), (5, 4), (6, 3), (7, 2), (8, 1), (9, 0)]
로그인 후 복사

매개변수 키는 다음과 같습니다: key=int, key=len, key=lambda... 

2.

. dict의 키-값 값을 값에 따라 작은 것부터 큰 것으로 출력하는 방법은 무엇입니까?

dic = {&#39;z&#39;:1, &#39;y&#39;:4,&#39;x&#39;:2,&#39;g&#39;:3,&#39;sg&#39;:3}

dic= sorted(dic.items(),key=lambda x:x[1])
print(dic)
# [(&#39;z&#39;, 1), (&#39;x&#39;, 2), (&#39;sg&#39;, 3), (&#39;g&#39;, 3), (&#39;y&#39;, 4)]
로그인 후 복사

정렬 후 사전으로 변환:

from collections import OrderedDict

dic = {&#39;z&#39;:1, &#39;y&#39;:4,&#39;x&#39;:2,&#39;g&#39;:3,&#39;sg&#39;:3}
dic= OrderedDict(sorted(dic.items(),key=lambda x:x[1]))

print dic
# OrderedDict([(&#39;z&#39;, 1), (&#39;x&#39;, 2), (&#39;sg&#39;, 3), (&#39;g&#39;, 3), (&#39;y&#39;, 4)])
for k,v in dic.items():
    print k,v
# z 1
# x 2
# sg 3
# g 3
# y 4
로그인 후 복사

,

대소문자, 숫자만 포함하는 문자열 제공, 정렬 보장:

    모두 소문자 대문자 앞
  • 숫자 앞의 모든 문자
  • 짝수 앞의 모든 홀수
  • s = "Sorting1234"
    
    def sort_str(x):     # x 传入的每个元素
        if x.isdigit():
            if int(x) % 2 == 0:
                return (4,x)    # 返回的是元祖,元祖可进行排序
            return (3,x)
        elif x.islower():
            return (0,x)
        elif x.isupper():
            return (1,x)
    
    li = sorted(s,key=sort_str)
    print(li)
    # [&#39;g&#39;, &#39;i&#39;, &#39;n&#39;, &#39;o&#39;, &#39;r&#39;, &#39;t&#39;, &#39;S&#39;, &#39;1&#39;, &#39;3&#39;, &#39;2&#39;, &#39;4&#39;]
    string = &#39;&#39;.join(li)
    print(string)
    # ginortS1324
    로그인 후 복사
더 간결한 코드:

s = "Sorting1234"

s ="".join(sorted(s, key=lambda x: (x.isdigit(), x.isdigit() and int(x) % 2 == 0, x.isupper(), x.islower(), x)))
print(s)
# ginortS1324
로그인 후 복사
 
 

위 내용은 Python 정렬에 대한 간략한 토론의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 추천
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿