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

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引数を活用すると、独自の基準による柔軟な並べ替えが簡単に実現できます。

  1. 【Python】文字列の長さに基づいてリストを並べ替える方法

    文字列のリストがあり、その長さを基準にリストを並べ替えたいとします。つまり、短い文字列から長い文字列へと昇順に整列させる必要があります。これを実現するには、独自のアルゴリズムを書くか、Pythonの組み込みメソッドであるsort()や関数sorted()を、キー(key)引数と組み合わせて使用するのが便利です。実行例まず、どのような動作になるのか例で確認しましょう。入力: strings = [hafeez, aslan, honey, appi] 出力: [appi, aslan, honey, hafeez]それでは、sorted(key)関数とsort(key)メソッドを使ったプログラム

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

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