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

Pythonで文字列リストを一意な文字数に基づいてソートする方法


文字列のリストを「一意(ユニーク)な文字の数」に基づいて並べ替えたい場合、setlistlen を組み合わせた関数を定義し、それをソートのキーとして指定することで簡単に実現できます。

サンプルコード

以下はその実装例です。

def my_sort_func(my_elem):
   return len(list(set(my_elem)))

my_list = ['python', "Will", "Hi", "how", 'fun', 'learn', 'code']
print("The list is : ")
print(my_list)

my_list.sort(key = my_sort_func)

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

出力結果

The list is :
['python', 'Will', 'Hi', 'how', 'fun', 'learn', 'code']
The result is :
['Hi', 'Will', 'how', 'fun', 'code', 'learn', 'python']

処理の流れと解説

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

  • この関数内では、set を使って文字列から重複する文字を除去し、その結果を list に変換したうえで、len によって要素数(=一意な文字数)を取得して返します。たとえば 'python' の場合は6種類の文字があるため6が返されます。

  • 関数の外側で、ソート対象となる文字列のリストを定義し、その内容をコンソールに表示します。

  • sort メソッドの key 引数に先ほど定義した関数を指定することで、「一意な文字数が少ない順」にリストが並べ替えられます。

  • 最後に、ソート後の結果をコンソールに出力します。

補足:sorted() を使う方法

元のリストを変更せずに新しいソート済みリストを作成したい場合は、組み込み関数 sorted() を使うこともできます。

result = sorted(my_list, key=my_sort_func)
print(result)

sort() はリスト自体を破壊的に並べ替えるのに対し、sorted() は元のリストを保持したまま新しいリストを返すため、用途に応じて使い分けるとよいでしょう。

  1. Pythonで1種類の文字だけを含む部分文字列の総数を求めるプログラム

    問題の概要小文字の英字のみで構成される文字列 s が与えられたとき、「1種類の文字だけで構成されている部分文字列」の総数を求めます。例えば、入力が xxyy の場合、出力は 6 になります。条件を満たす部分文字列は [x, x, xx, y, y, yy] の6つだからです。解決のアプローチこの問題は、連続して同じ文字が並ぶ区間(ラン)ごとに考えると効率的に解けます。長さ n の同一文字の連続区間から作れる部分文字列の数は n(n+1)/2 個ですが、ループ内で「現在の文字が何文字連続しているか」をカウントしながら合計へ加算していけば、結果的に同じ値が得られます。具体的な手順は次のとおりです。

  2. Pythonでリスト内の最小値を見つける方法を解説

    この記事では、リストの中から最小の数値を見つける方法について、具体的なサンプルコードとともに詳しく解説します。問題の概要問題: 数値のリストが与えられたとき、その中に含まれる最も小さい数値を画面に表示すること。この問題を解くアプローチは主に2つあります。ひとつは sort() メソッドを使ってリストを昇順に並べ替え、先頭の要素(インデックス0)を取得する方法。もうひとつは、Pythonに標準で用意されている組み込み関数 min() を使う方法です。それぞれ順番に見ていきましょう。方法1:sort()メソッドで並べ替えて最小値を取得するまずはリストを昇順にソートし、先頭の要素を取り出す方法です。