[Python]ソートの整理(sort,sorded)


開始します。


アルゴリズムに役立つソート関数をまとめたいと思います!🙌
Pythonには、sort()およびsorted()関数があります.では、両者の違いと選択肢を理解してみましょう.

sort()

  • sort()オリジナルを並べ替えたまま.
  • sort_list = [1,5,23,5,2343,124]
    sort_list.sort()
    print(sort_list)
    
    >>> [1, 5, 5, 23, 124, 2343]
    上記のコードに示すようにsortリスト自体はソートされています.

    sorted()

  • sorted()変形しないオリジナルは新しいリストに戻ります.
  • sorted_list = [1,5,23,5,2343,124]
    result = sorted(sorted_list)
    print("result: ", result)
    print("원본: ",sorted_list)
    
    >>> result:  [1, 5, 5, 23, 124, 2343]
    >>> 원본:  [1, 5, 23, 5, 2343, 124]
    このように、既存のリストsord listはそのままであり、新しいソートされたリストを返した結果、ソートされたことを示す.sort()元の順序に戻ります.sorted()順序を変更したリストに戻ります.

    reverse

  • 以上のことから、Pythonは昇順ソートを提供している.しかし、降順にリストを並べる必要がある場合があります.この場合、降順で並べ替えられたlistを非常に簡単に得ることができる.
  • 上図よりsort()のうち2パラメータkey, reverse降順に必要なパラメータはreverseです.reverse = Trueで与えられ、降順のリストが得られる.
  • sort_list = [1,5,23,5,2343,124]
    sort_list.sort(reverse=True)
    
    >>> [2343, 124, 23, 5, 5, 1]
    sorted_list = [1,5,23,5,2343,124]
    result = sorted(sorted_list, reverse=True)
    
    >>> result:  [2343, 124, 23, 5, 5, 1]
    >>> 원본:  [1, 5, 23, 5, 2343, 124]

    key

  • ソート条件を設定する関数を加えることができます.もちろんlambdaでもいいです.
  • 文字列からなるリストを文字数で並べ替えたい場合はkey = Trueを使用します.
  • str_list = ["세글자", "두울", "일", "네에글자"]
    str_list.sort(key=len)
    
    >>> ['일', '두울', '세글자', '네에글자']

    lambdaを用いて学生の成績をソートする

    score_list = [
        ("A학생", 60),
        ("B학생", 80),
        ("C학생", 50),
        ("D학생", 70),
    ]
    score_list.sort(key = lambda x : -x[1])
    
    >>> [('B학생', 80), ('D학생', 70), ('A학생', 60), ('C학생', 50)]
    Lambdaでは、手前が-x[0]とすると、reverse=Trueと同じ効果が得られます.

    Lambdaを使用したマルチ条件ソート

  • 同じ成績の場合、名前順のコード.
  • score_list = [
        ("A학생", 60),
        ("B학생", 80),
        ("C학생", 50),
        ("D학생", 70),
        ("E학생", 70),
    ]
    score_list.sort(key = lambda x : (-x[1], x[0]))
    
    >>> [('B학생', 80), ('D학생', 70), ('E학생', 70), ('A학생', 60), ('C학생', 50)]
  • 成績が同じD、Eの生徒は名前順に並べ替えられるのが見られる.