Python でのソートに関する簡単な説明

PHP中文网
リリース: 2017-06-21 15:25:42
オリジナル
1170 人が閲覧しました

ソートについて簡単に説明します

Python ではソート関数とソート関数が提供されており、1 つはその場でソートし、もう 1 つはソート後に新しい結果を返します

1。パラメータ

関数プロトタイプ:

sort([cmp[, key[, reverse]]])
ログイン後にコピー

  • は、sort メソッドが 3 つのパラメータを受け入れることを意味します。デフォルトは昇順ソートです。

  • 最初のパラメータ cmp は、2 つのパラメータ (リストの要素) を比較する方法です。整数などの組み込み型の比較の場合、この方法は非常に直感的ですが、カスタムの比較の場合は、比較関数を定義します。関数は 0 を返します。これは、2 つの数値が等しいことを意味します。負の数値を返す場合は、最初のパラメーターが 2 番目のパラメーターよりも小さいことを意味します。パラメータ。

  • 2 番目のパラメーターのキーは、リスト要素のどの属性が比較されるかです。

  • 3 番目のパラメータ 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. 並べ替え

. 辞書内のキーと値の値を値に応じて小さいものから大きいものまで出力するにはどうすればよいですか?

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 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート