Pythonで句読点の数に基づいて文字列を並べ替える方法
文字列のリストを「句読点(記号)の数」に基づいて並べ替えたい場合があります。Pythonでは、stringモジュールのpunctuation定数とリスト内包表記を組み合わせることで、この処理を簡潔に実装できます。
具体的には、文字列を引数として受け取り、その中に含まれる句読点の個数を返す関数を定義し、それをsortメソッドのkey引数に指定するのが基本的なアプローチです。
以下に実際のコード例を示します。
サンプルコード
from string import punctuation
def get_punctuation_count(my_str):
return len([element for element in my_str if element in punctuation])
my_list = ["python@%^", "is", "fun!", "to@#r", "@#$learn!"]
print("元のリスト:")
print(my_list)
my_list.sort(key = get_punctuation_count)
print("並べ替え後のリスト:")
print(my_list)実行結果
元のリスト: ['python@%^', 'is', 'fun!', 'to@#r', '@#$learn!'] 並べ替え後のリスト: ['is', 'fun!', 'to@#r', 'python@%^', '@#$learn!']
コードの解説
まず、
stringモジュールからpunctuation(すべてのASCII句読点文字をまとめた定数)をインポートします。get_punctuation_countという関数を定義します。この関数は文字列を引数として受け取り、リスト内包表記を使って各文字を順番に調べます。in演算子により、各文字が句読点であるかどうかを判定し、該当する文字だけを新しいリストに集めます。最後に、句読点として抽出された文字数(リストの長さ)を
len()で返します。関数の外側では、並べ替え対象のリストを定義し、コンソールに表示しています。
sortメソッドを呼び出す際、key引数に先ほど定義したget_punctuation_count関数を指定することで、各要素は「句読点の数」を基準に昇順で並べ替えられます。その結果、句読点を含まない
'is'が先頭になり、句読点を多く含む'@#$learn!'が末尾に配置されます。
補足:降順で並べ替えるには
句読点の多い文字列を先頭にしたい場合は、reverse=Trueオプションを追加するだけで対応できます。
my_list.sort(key = get_punctuation_count, reverse=True)
このように、Pythonのkey引数を活用すると、独自の基準による柔軟な並べ替えが簡単に実現できます。
-
【Python】文字列の長さに基づいてリストを並べ替える方法
文字列のリストがあり、その長さを基準にリストを並べ替えたいとします。つまり、短い文字列から長い文字列へと昇順に整列させる必要があります。これを実現するには、独自のアルゴリズムを書くか、Pythonの組み込みメソッドであるsort()や関数sorted()を、キー(key)引数と組み合わせて使用するのが便利です。実行例まず、どのような動作になるのか例で確認しましょう。入力: strings = [hafeez, aslan, honey, appi] 出力: [appi, aslan, honey, hafeez]それでは、sorted(key)関数とsort(key)メソッドを使ったプログラム
-
Pythonで文字列のリストを並べ替える方法:sort()とsorted()の使い分け
Pythonでは、文字列のリストを並べ替える方法が2つ用意されています。リスト自体を直接変更するsort()メソッドと、元のリストを保持したまま新しい並べ替え済みリストを作成するsorted()関数です。それぞれの特徴と使い方を解説します。 sort()メソッドでリストをその場で並べ替える sort()は、リストそのものを並べ替える「in-place(破壊的)」な操作です。元のリストの順序が直接変更されるため、戻り値を受け取る必要はありません。 >>> a = [Hello, My, Followers] >>> a.sort() >>>