Python でタプルのリストを並べ替える

Vaibhhav Khetarpal 2023年1月30日
  1. Python でタプルのリストをソートするには list.sort() 関数を使用する
  2. バブルソートアルゴリズムを使って Python でタプルのリストをソートする
Python でタプルのリストを並べ替える

Python では、タプルを使って複数の項目を 1つの変数に格納することができます。タプルのリストは整数のリストのように並べ替えることができます。

このチュートリアルでは、タプルのリストを、タプルの 1 番目、2 番目、または ith 番目の要素に基づいてソートするさまざまな方法について説明します。

Python でタプルのリストをソートするには list.sort() 関数を使用する

関数 list.sort() はリストの要素を昇順または降順にソートします。パラメータ key はソートに用いる値を指定します。key は各リストの要素に適用できる関数やその他の呼び出し可能なものでなければならません。

以下のコードは、すべてのタプルの 2 番目の要素に基づいてタプルをソートします。

list_students = [
    ("Vaibhhav", 86),
    ("Manav", 91),
    ("Rajesh", 88),
    ("Sam", 84),
    ("Richie", 89),
]

# sort by second element of tuple
list_students.sort(key=lambda x: x[1])  # index 1 means second element

print(list_students)

出力:

[('Sam',84), ('Vaibhhav',86), ('Rajesh',88), ('Richie',89), ('Manav',91)]

sort() メソッドの reverse パラメータに True を指定することで、順序を逆にして降順にすることができます。

次のコードは、reverse パラメータを用いてタプルのリストを降順にソートします。

list_students = [
    ("Vaibhhav", 86),
    ("Manav", 91),
    ("Rajesh", 88),
    ("Sam", 84),
    ("Richie", 89),
]

# sort by second element of tuple
list_students.sort(key=lambda x: x[1], reverse=True)

print(list_students)

出力:

[('Manav',91), ('Richie',89), ('Rajesh',88), ('Vaibhhav',86), ('Sam',84)]

バブルソートアルゴリズムを使って Python でタプルのリストをソートする

バブルソートは、最も単純なソートアルゴリズムの 1つです。これは、リスト内の隣接する要素の順序が間違っている場合には、リスト内の隣接する要素を入れ替えることで動作し、リストがソートされるまでこのステップを繰り返します。

次のコードは、2 番目の要素に基づいてタプルをソートし、バブルソートアルゴリズムを使用しています。

list_ = [("Vaibhhav", 86), ("Manav", 91), ("Rajesh", 88), ("Sam", 84), ("Richie", 89)]

# sort by second element of tuple
pos = 1
list_length = len(list_)

for i in range(0, list_length):
    for j in range(0, list_length - i - 1):
        if list_[j][pos] > list_[j + 1][pos]:
            temp = list_[j]
            list_[j] = list_[j + 1]
            list_[j + 1] = temp

print(list_)

出力:

[('Sam',84), ('Vaibhhav',86), ('Rajesh',88), ('Richie',89), ('Manav',91)]

変数 pos はソートを行う位置を指定します。

タプルのリストをソートするために 1 番目の要素を使うこともできます。以下のプログラムはこれを実装したものです。

list_ = [("Vaibhhav", 86), ("Manav", 91), ("Rajesh", 88), ("Sam", 84), ("Richie", 89)]

# sort by first element of tuple
pos = 0
list_length = len(list_)
for i in range(0, list_length):
    for j in range(0, list_length - i - 1):
        if list_[j][pos] > list_[j + 1][pos]:
            temp = list_[j]
            list_[j] = list_[j + 1]
            list_[j + 1] = temp

print(list_)

出力:

[('Manav',91), ('Rajesh',88), ('Richie',89), ('Sam',84), ('Vaibhhav',86)]
Vaibhhav Khetarpal avatar Vaibhhav Khetarpal avatar

Vaibhhav is an IT professional who has a strong-hold in Python programming and various projects under his belt. He has an eagerness to discover new things and is a quick learner.

LinkedIn

関連記事 - Python Tuple