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

【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() 関数でも同じ処理が可能です)を活用し、入力配列内の正負の整数を効率的に並べ替える方法を学びました。このテクニックは、データの前処理やフィルタリングなど、さまざまな場面で応用できます。


  1. 【Python】行・列ソート済み行列に含まれる負の数を効率的にカウントする方法

    この記事では、行方向・列方向にソートされた行列(row-wise and column-wise sorted matrix)に含まれる負の数を、計算量の少ない最適なアルゴリズムでカウントするPythonプログラムを紹介します。 行・列ソート済み行列とは 「行・列ソート済み配列」とは、任意の位置にある値が、同じ行の右隣の値、および同じ列の下の値と比較して小さいか等しい(昇順になっている)行列のことです。つまり、左から右へ、上から下へと向かって値が増えていく構造を持っています。 例:行列Mの場合 M = [[-40, -12, 1, 5], [-35, -2, 5, 15],

  2. Pythonのmap関数とラムダ式で文字を入れ替える方法

    map関数とラムダ式による文字の置き換えPythonでは、ある文字 a1 を別の文字 a2 に、そして a2 を a1 に相互に入れ替えたい場面があります。例えば、次のような入力文字列があったとします。puporials toinpこの文字列に含まれる「p」と「t」を入れ替えると、最終的に次のような結果を得たいわけです。tutorials pointこのような処理を実現するには、map関数とラムダ式(lambda)を組み合わせるのが便利です。map関数とラムダ式の仕組みmap(lambda, input) 関数は、渡されたイテラブル(反復可能なオブジェクト)の各要素に対して順番にラムダ式を適用