配列の合計値を求める|Python|女子大生エンジニアの備忘録 #5
こんにちは、鈴です。
今回はあらかじめ与えられている、または入力で受け取っている整数型の値が格納された配列の合計値を求める方法についての備忘録になります。
比較的簡単な内容となっておりますので、安心してください。
前回の記事はこちら↓
では早速行ってみましょう!
線形探索
ランダムな配列の中から目的のデータを見つける方法を線形探索(sequential search)と呼びます。
線形探索では、繰り返し処理(ループ)で配列を処理します。
線形探索の前段階として、今回は配列の合計値を求める場合について取り扱っています。
アルゴリズム
アルゴリズムは以下のようになります。
- 配列の値を受け取る(または定義する)
- 合計値を格納する変数(ここではsumとする)を0で初期化
- 配列の中の全ての値について、sum = sum + 値xの処理を繰り返す
- sumの値を表示
いくつかポイントを整理しますね。
sum = 0
繰り返し処理を行う上で大切なのがループ中に使用する変数を事前に初期化しておくことです。
この初期化を忘れてループ処理を実行してしまうと、事前に定義されていない変数に対して値を代入することになるため、正確な値が計算できなくなってしまいます。
sum = sum + 値
プログラミングの世界で使用する=は計算式の=とは異なります。
具体的には、左の変数に右の計算結果を格納することを表します。
そのため、sum = sum + 値x の場合、
- 元々のsumの値とxの値を加算
- 計算結果を変数sumに上書き
という処理が実行されています。
Pythonでのプログラム例
ここからは、3つほどプログラム例を記述します。
例1
まず、基本形として、以下のような場合のプログラムを記述します。
- 配列の値は初期値で与えたもの
- forループで受け取る配列のインデックスを更新して繰り返し処理
プログラムは上記の通りです。
len(a)で、配列の長さを受け取り、iを0からその値を超えない範囲で繰り返しインクリメント(+1)していきます。
例2
次の例は、以下のような仕様になっています。
- 配列を入力として受け取る
- for文で配列の各値を直接受け取り加算
整数型の配列を入力として受け取る際の記述は上記のようになります。
一行の記述で以下の処理が行われています。
- input().split()で1行分の入力を分割して受け取る
- map(int...)で受け取った値を整数型に変更
- list()で入力値をリストに格納
Pythonでは入力値がデフォルトで文字列型になるため、整数として演算を行いたい今回のような場合には整数型に変換する必要があります。
また、for文についての記述も先ほどを変わっています。
range()なしで配列をinの後ろにそのまま記述することで、配列の各値を先頭からそのまま受け取ることができます。
例3
最後の例は以下のような仕様になっています。
- 配列は入力で受け取る
- 繰り返し処理をwhile文で記述
例2と異なる点はループ処理ですね。
while 条件式 で、条件式が真の間ループをする処理を記述することができます。
while文は条件の指定を間違えると無限ループになってしますので注意してください。
上記の例では例1同様に変数iに配列のインデックスを格納しています。
iの値の更新を自分で記述しないといけない点がfor文と異なりますね(この記述を忘れると無限ループになります)。
まとめ
いかがだったでしょうか。
今回のポイントは以下の通りです。
- 配列から目的のデータを見つけるような処理を線形探索と呼ぶ
- 線形探索の場合にはループ処理が有効
- 繰り返し処理の中で値を更新する変数は、ループの前に初期化しておく
- ループ処理にはfor文での記述、while文での記述がある
- while文の場合は無限ループに注意
線形探索は基本的な処理なので、競技プログラミングなどでも頻繁に利用します。
そのうちもう少し難しい探索法についての記事も書いていけたらと思います。
余談
while文を使う時は今でも無限ループに陥ってエラーになることが多々あります。
競技プログラミングを始める前は線形探索で全ての処理がなんとかなると思っていたくらい、簡単な実装ではこの線形探索が活躍しますね。
次の記事はこちらから↓
ではまた。
鈴