【Python】Lambda式で正の数と負の数を並べ替える方法
本記事では、正の整数と負の整数が混在する配列を入力として受け取り、それらを「負の数のグループ」と「正の数のグループ」に分けて並べ替える方法について解説します。
ここでは、引数として整数の配列を1つだけ受け取る Rearrange() 関数を定義します。この関数は、負の数を配列の先頭側へ、正の数(0を含む)を末尾側へそれぞれまとめたうえで、2つのリストを結合して返します。
それでは、実際のコードを見ながら具体的な動作を確認していきましょう。
コード例
def Rearrange(arr): # 最初の条件式は、arr 内の負の数のみを抽出したリストを返します。 # 2番目の条件式は、arr 内の正の数(0を含む)のみを抽出したリストを返します。 arr_neg=[x for x in arr if x < 0] arr_pos=[x for x in arr if x >= 0] return arr_neg + arr_pos # ドライバー関数 if __name__ == "__main__": arr = [19,-56,3,-1,-45,-23,45,89,90] print (Rearrange(arr))
実行結果
[-56, -1, -45, -23, 19, 3, 45, 89, 90]
コードのポイント
x for x in arr if x < 0 のような条件付きリスト内包表記を使うことで、1行で特定の条件を満たす要素だけを簡単に抽出できます。同様の処理は filter() 関数と lambda 式を組み合わせて書くことも可能です。例えば list(filter(lambda x: x < 0, arr)) とすれば、負の数だけを持つリストが得られます。
また、元の配列内での相対的な順序は保持されるため、出力結果では元の並び順を保ったまま、負の数が前半、正の数が後半に配置されます。
まとめ
本記事では、条件に応じて要素を振り分けるリスト内包表記(lambda 式や filter() 関数でも同じ処理が可能です)を活用し、入力配列内の正負の整数を効率的に並べ替える方法を学びました。このテクニックは、データの前処理やフィルタリングなど、さまざまな場面で応用できます。
-
【Python】行・列ソート済み行列に含まれる負の数を効率的にカウントする方法
この記事では、行方向・列方向にソートされた行列(row-wise and column-wise sorted matrix)に含まれる負の数を、計算量の少ない最適なアルゴリズムでカウントするPythonプログラムを紹介します。 行・列ソート済み行列とは 「行・列ソート済み配列」とは、任意の位置にある値が、同じ行の右隣の値、および同じ列の下の値と比較して小さいか等しい(昇順になっている)行列のことです。つまり、左から右へ、上から下へと向かって値が増えていく構造を持っています。 例:行列Mの場合 M = [[-40, -12, 1, 5], [-35, -2, 5, 15],
-
Pythonのmap関数とラムダ式で文字を入れ替える方法
map関数とラムダ式による文字の置き換えPythonでは、ある文字 a1 を別の文字 a2 に、そして a2 を a1 に相互に入れ替えたい場面があります。例えば、次のような入力文字列があったとします。puporials toinpこの文字列に含まれる「p」と「t」を入れ替えると、最終的に次のような結果を得たいわけです。tutorials pointこのような処理を実現するには、map関数とラムダ式(lambda)を組み合わせるのが便利です。map関数とラムダ式の仕組みmap(lambda, input) 関数は、渡されたイテラブル(反復可能なオブジェクト)の各要素に対して順番にラムダ式を適用