Pythonのmap関数を使って「1」が最も多い行を見つけるプログラム
0と1だけで構成された2次元配列(行列)が与えられ、すべての行はあらかじめソートされているものとします。この中から「1」の個数が最も多い行を見つけるのが本記事の目的です。ここでは、Pythonの組み込み関数である map() を活用します。
map() 関数は、関数型プログラミングに用いられるPython組み込みツールの中でも最もシンプルなものの一つです。シーケンスやその他のイテラブル(反復可能オブジェクト)に対して、指定した関数を一括して適用することができます。
実行例
入力 : 入力配列 : [[0, 1, 1, 1, 1], [0, 0, 1, 1, 1], [1, 1, 1, 1, 1], [0, 0, 0, 0, 1]] 1が最も多い行のインデックス = 2
この例では、3行目(インデックス2)の [1, 1, 1, 1, 1] に5つの「1」が含まれており、他のどの行よりも多いため、結果は「2」となります。
アルゴリズム
ステップ1 : map関数を使って、行列の各行ごとの合計値(=1の個数)を求める。 ステップ2 : 各行の1の合計値を要素とするリストが返される。 ステップ3 : リスト内の最大値のインデックスを出力する。
サンプルコード
# 「1」が最も多い行を見つけるPythonプログラム
def maximumofones(n):
# map()で各行にsum()を適用し、行ごとの1の個数リストを作成
max1 = list(map(sum, n))
print("MAXIMUM NUMBER OF 1's ::>", max1.index(max(max1)))
# ドライバープログラム
if __name__ == "__main__":
n = [[0, 1, 1, 1, 1], [0, 0, 1, 1, 1], [1, 1, 1, 1, 1], [0, 0, 0, 0, 1]]
maximumofones(n)
出力結果
MAXIMUM NUMBER OF 1's ::> 2
コードのポイント
list(map(sum, n)) の部分では、map() が行列 n の各行(リスト)に対して sum() 関数を順番に適用します。行の要素は0と1のみなので、各行の合計値はそのまま「1の個数」を表します。その後、max() で最大値を取得し、index() メソッドでその位置(行インデックス)を特定しています。
この手法を使えば、明示的なループ処理を書かずに、簡潔かつ読みやすいコードで目的の行を効率的に見つけることができます。
-
Pythonで最大の成功確率を持つパスを見つけるプログラムの実装方法
問題の概要 n 個のノード(ノードには 0 から順に番号が振られています)からなる無向重み付きグラフを考えます。このグラフは辺リスト(edge list)として入力され、各辺 e には「その辺を通過する際の成功確率」probability[e] が割り当てられています。さらに、開始ノード(start)と終了ノード(end)も与えられます。 求めたいのは、start から end へ移動するときに成功確率が最大となる経路であり、答えとしてその成功確率を返します。経路がひとつも存在しない場合は 0 を返してください。 たとえば、次のような入力が与えられたとします。 この場合の出力は 0.25
-
Pythonでリスト内の最小値を見つける方法を解説
この記事では、リストの中から最小の数値を見つける方法について、具体的なサンプルコードとともに詳しく解説します。問題の概要問題: 数値のリストが与えられたとき、その中に含まれる最も小さい数値を画面に表示すること。この問題を解くアプローチは主に2つあります。ひとつは sort() メソッドを使ってリストを昇順に並べ替え、先頭の要素(インデックス0)を取得する方法。もうひとつは、Pythonに標準で用意されている組み込み関数 min() を使う方法です。それぞれ順番に見ていきましょう。方法1:sort()メソッドで並べ替えて最小値を取得するまずはリストを昇順にソートし、先頭の要素を取り出す方法です。