python勉強11日目 2つのリストの同じ位置にある値(int型)を計算する
例えば
base = [2,3,4]
というリストと
hight = [5,6,7]
というリストがあったとする。
base = [2,3,4]
hight = [5,6,7]
この2つのリストの同じ位置にある値を計算したい場合、つまり
「base[0] * hight[0]」(2*5)
「base[1] * hight[1]」(3*6)
「base[2] * hight[2]」(4*7)
の計算をする方法を考える。
まず、考えつくのはfor文のネスト
for a in base:
for b in hight:
print(a * b)
だが、これは誤り。
このコードだと、外側のfor文の値に対して内側のfor文の値が順番にかけられて(ループして)出力されてしまう。
具体的には「2*5」「2*6」「2*7」「3*5」「3*6」「3*7」「4*5」「4*6」「4*7」の計算が出力されてしまう。
しかし、for文を使うのは間違ってなさそうだ。
一旦、整理しよう。
間違っていたのはネストさせたこと。
やりたいことは同じインデックスNoの値を掛け合わせること。
ということは、for文でインデックスNoを代入した変数を作り、その変数をbase[],hight[]の「[]」に代入すれば何とかなりそうだ。
上記の考えに基づいてコードを書くと
base = [2,3,4]
hight = [5,6,7]
for i in range(3):
print(base[i]*hight[i])
こうなる。
実際、このコードの出力結果は「10」「18」「28」と望んだものになる。
だが、このコードはもっと改善できそうだ。
具体的にはrange()の範囲に、リストの要素の数を自力で数えた値を入れているため、2つのリストの要素数が追加されるとその分は計算できないし、逆に要素が削除されてしまうとエラーとなってしまう。
range()の範囲に、「リストの要素の数を自力で数えた値」を入れたことが問題ということは、「プログラム(関数)で求めた値」を入れればこういった問題を解決できる。
リストの要素の数を求める関数はlen()関数だ。
base = [2,3,4]
hight = [5,6,7]
for i in range(len(base)):
print(base[i]*hight[i])
つまり、このように改善できる。
この記事が気に入ったらサポートをしてみませんか?