Python勉強中で備忘録です。今回はそれなりに問題がありましたが、比較的優しいものが多かったです。

これ5-3の問題の解答で使われてたやつですね。こちらを習った後の模範解答とすべきだと思います。

⇒以下の解答を作成。
strings = [‘The’, ‘quick’, ‘brown’]
lst = [len(strings[x]) for x in range(len(strings))]
lst
模範解答は以下でした。
・わざわざlstとか式にしなくてよい。
・リストに対してforを使うと、勝手に順番通りの要素を挙げてくれる
というのが反省点ですね。


⇒以下の解答を作成。最初、lst1を新たに作成せず、str1.split(‘,’)をしていたが、splitはstr1を直接変更するものではないから、lst1として定義が必要だった。尚、str、int、float、tupleは変更不可の型だからメソッドに寄らず変更されない。
str1 = ‘123,45,-3’
lst1 = str1.split(‘,’)
lst2 = [int(lst1[x]) for x in range(len(lst1))]
lst2
模範解答は以下でした。さっきとほぼ同じですね。


⇒分散の定義を忘れていたので確認したところ、(データ – 平均)の2乗の平均でした。
以下の解答を作成しました。
def var(lst):
ave = sum(lst)/len(lst)
var = sum((lst[x]-ave)**2 for x in range(len(lst)))/len(lst)
return var
模範解答は以下でした。これもさっきまでと同じ指摘になると思います。


⇒以下の解答を作成したところtrueとなりました。
def sum_lists(list1):
total = sum(list1[i][j] for i in range(len(list1)) for j in range(len(list1[i])))
return total
これの模範解答は以下でした。こちらが正しいですね。私の解答はリストの要素の全ての数の総和ですが、問題文は「リストの総和を求め、それらの総和を足し合わせて」でした。これを見落としていたため、不正解になります。


⇒以下の解答を作成したところ、エラー発生。こういう使い方はできないんですね。リストの中に無いと内包と言えないからですかね。
def sum_matrix(list1, list2):
list3[i][j] = list1[i][j] + list2[i][j] for i in range(3) for j in range(3)
return list3
以下の解答を作成したところtrue。リストにおいて内包表記を使うとそのままリストになりますね。だからlist3[i][j]みたいなのは不要と。そもそもlist3[i][j]って書くにはたぶんlist3を最初に定義しておかないとダメですね。list3 = [[0, 0, 0], [0, 0, 0], [0, 0, 0]]みたいに置くとか。*結局内包じゃないのでダメですが。
def sum_matrix(list1, list2):
list3 = [[list1[i][j] + list2[i][j] for j in range(3)] for i in range(3)]
return list3
例によってlist3としてわざわざ立てる必要はありませんでしたが、あとは模範解答と同一でした。

⇒これについて、式を入れた時に{3, 8, 7}じゃなく{8, 3, 7}で返ってくるのはなぜかChatGPTに聞いたところ、ハッシュ値の関係とのこと。*{3, 8, 7}と{8, 3, 7}は同じものとして扱われる。

コメント