Python学習編7回目です。
前回は東京大学のPython学習ページで2-1. 文字列 (string)を学びました。今回は2-2. リスト (list)(前半)。
今回のミスはこちら。
入力:リスト ln を引数として取り、ln の偶数番目のインデックスの値を削除したリストを返す関数 remove_evenindexとして、以下のコードを描きました。誤りを指摘してください
def remove_evenindex(ln):
remove_evenindex[0::2]=[”]
return remove_evenindex
出力:指摘されたコードにはいくつかの誤りがあります。修正するべき点を以下に示します:
- 関数内でのリスト操作: 関数内でリスト
ln
の偶数番目(プログラミングでは通常0からカウントされるため、実際には「奇数番目」の要素)のインデックスを削除しようとしていますが、誤って関数名remove_evenindex
をリストのように扱っています。正しくは、引数で渡されたリストln
に対して操作を行うべきです。 - リストのスライス削除: Pythonではリストのスライスに直接値を代入しても、その部分を削除することはできません。スライスを使ってリストから要素を削除する代わりに、新しいリストを作成するか、リスト内包表記を使用して偶数番目の要素を除外した新しいリストを生成する必要があります。
以下に、修正したコードを示します:
pythonCopy code
def remove_evenindex(ln): # 偶数番目のインデックスの要素を除外した新しいリストを生成
return ln[1::2]
うーん、これはまずい。概念というか次元が分かっていない。自然科学で例えると速さを求めるのに重さを時間で割っているようなミスをしている。入力と出力の型を土台から理解する必要があるか。
毎回ミスをおこしてて、プログラミングの学習というよりミスを起こした場所を探り当てる作業になっている。理解が遠のいてもテンポを重視すべきか。昔ミスを探り当てる作業に萎えて放り出した同じ轍は踏みたくない。
次回に続く