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])

つまり、このように改善できる。

この記事が気に入ったらサポートをしてみませんか?