Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonで文字列リストを部分文字列の範囲をキーに並べ替える方法

文字列のリストを「部分文字列の範囲」を基準に並べ替えたいケースがあります。たとえば、各文字列の2文字目から3文字目までを比較対象にしてソートするような場合です。Pythonでは、sort() メソッドの key 引数にスライス処理を行う関数を渡すことで、この要件をシンプルに実現できます。

サンプルコード

以下は、部分文字列の範囲をキーに文字列リストを並べ替える例です。

def get_substring(my_string):
   return my_string[i : j]

my_list = ["python", 'is', 'fun', 'to', 'learn']

print("The list is :")
print(my_list)

i, j = 1, 3
print("The value of i and j are :")
print(str(i)+ ',' +str(j))

my_list.sort(key=get_substring)

print("The result is :")
print(my_list)

実行結果

The list is :
['python', 'is', 'fun', 'to', 'learn']
The value of i and j are :
1,3
The result is :
['learn', 'to', 'is', 'fun', 'python']

コードの解説

  • get_substring という名前の関数を定義し、引数として文字列を受け取ります。

  • 関数内では文字列のスライシングを使用し、指定した範囲 i から j までの部分文字列を返します。

  • 関数の外側で、5つの文字列を含むリスト my_list を定義し、コンソールに表示します。

  • スライス範囲となる2つの変数 ij に値を設定し、コンソールに表示します。ここでは i=1j=3 です。

  • sort() メソッドの key 引数に先ほど定義した関数を指定し、部分文字列を基準にリストを並べ替えます。

  • 並べ替え後のリストをコンソールに出力します。

動作のポイント

Pythonのスライス my_string[i:j] は、インデックス i 以上 j 未満の部分文字列を返します。今回の例(i=1j=3)では、各文字列から取り出される比較キーは以下の通りです。

  • 「python」→「yt」

  • 「is」→「s」

  • 「fun」→「un」

  • 「to」→「o」

  • 「learn」→「ea」

これらを辞書順に並べると「ea」「o」「s」「un」「yt」の順になるため、実行結果は ['learn', 'to', 'is', 'fun', 'python'] となります。

なお、同じ処理は lambda 式を使えば、関数を別途定義せずに次のように1行で書くこともできます。

my_list.sort(key=lambda s: s[i:j])

状況に応じて、再利用性を重視するなら通常の関数、簡潔さを重視するなら lambda を選ぶとよいでしょう。

  1. Pythonでリストのすべてのサブリストを生成して出力する方法

    リストが与えられたとき、そのリストに含まれるすべてのサブリスト(部分リスト)を生成して出力するプログラムを紹介します。要素数 n のリストの場合、空のリストを含めるとサブリストの総数は n×(n+1)/2+1 個になります。 実行例 入力 : list = [1, 2, 3] 出力 : [], [1], [1, 2], [1, 2, 3], [2], [2, 3], [3] アルゴリズム 考え方はシンプルです。開始位置 i と終了位置 j の組み合わせをすべて試し、スライスで部分リストを取り出します。 ステップ1 : 対象となるリストを用意します。 ステップ2 : 結果を格納するため、最

  2. Pythonで文字列のリストを並べ替える方法:sort()とsorted()の使い分け

    Pythonでは、文字列のリストを並べ替える方法が2つ用意されています。リスト自体を直接変更するsort()メソッドと、元のリストを保持したまま新しい並べ替え済みリストを作成するsorted()関数です。それぞれの特徴と使い方を解説します。 sort()メソッドでリストをその場で並べ替える sort()は、リストそのものを並べ替える「in-place(破壊的)」な操作です。元のリストの順序が直接変更されるため、戻り値を受け取る必要はありません。 >>> a = [Hello, My, Followers] >>> a.sort() >>>