【Python学習帳】020_rangeなど使ったリスト操作
初学者を対象としている京都大学の無料Python教材の学習中です。
「プログラミング演習 Python 2021」
Version2021_10_08_01.pdf
をCC-BY-NC-NDライセンスに従って引用します。
前回から第5章の制御構造の勉強中です。
for 文と range() 関数を用いて繰り返しを自動化することを学びます.
正確には range は関数ではなく「クラス」として実装されているのですが,関数 のような使い方が主ですので,ここでは簡単のため range() 関数と呼びます. range() は一定間隔での数値の並びを生成してくれます.
今回は range を学ぶのですが、一度既に取り上げていました。
「関数」とメソッドは良く似ていますが,関数は特定のオブジェクトに紐づけられていないのに対し,メソッドは紐づけられたオブジェクトを主な操作の対象とします.
呼び出し方はほぼ同じです.
rangeの引数を1~3つ使うことで大きく分けて3通りの使い方があり、一番単純な下記の方法は既に体験済みです。
- 終了値を与える.先に見たように
range(終了値)
といった使い方です.0 で始まり,終了値より手前の整数で終わります.
それ以外に、
- 開始値と終了値の2つを与える.
range(開始値, 終了値)
● 開始値と終了値とステップ幅の 3 つを与える.
range(開始値, 終了値, ステップ幅)
教材には演習もあり丁寧に学習できます。
さらに
5.2.7 for 文の入れ子
行と列のように2方向に広がる表の各要素の生成は for 文のブロック中にさらに
for 文を書くことで実現できます.
演習とは少しだけ内容を変えています。一部設定を変更して違いを見るのも勉強かと。
5.2.7 リストを操作する for 文
1) リストの長さと range 関数を組み合わせる方法
リストの要素を for 文で順に操作するには range(len(a)) で要素の番号を生成する
方法が一つ。要素の数と同じ回数だけ繰り返し処理されます。リストの要素をprintなどに利用したいときには、生成した番号を添え字にしてどの要素を扱うのか指定しています。
2) リストを for 文で直接使う方法
リストの何番目かを表示しなくても良くてリスト内の要素を順に表示するだけなら上記のようにできます。課題の5-11にもある通り、取り出した各要素が変数に代入されて繰り返し処理に利用できます。
注意点として、
この場合,d には要素の中身が与えられますので,d の値を変更してもリストの中身は変わりません.リストの要素を更新したいときには添え字でアクセスする方法を使います.
前に勉強した代入という操作に関しての補足かと思います。
上記のfor文ではリストaの各要素のidentityを変数dに入れているということでしょうか。d の値を変更しても新たな値のidentityが与えられるだけということかなと思います。この辺まだ分かった気になれないですけど、すごく大切そう。
3) enumerate 関数を使う方法
添え字と要素の値を共に使いたい場合は enumerate 関数を使います.
リストをenumerate関数で扱う例は下記にいくつか挙げられていました。
Forの後に”i, d”と二つの変数が書かれて戸惑いましたが、enumerate関数はインデックス番号, 要素の順に各要素がタプルで返ってくるのですね。
タプルの( )が省略されていたのだと、下記の通り書き換えてみて何となく納得しました。
下記の記事まではまた後日でいいかな。2つ以上の配列をまとめて処理することは確かにしばしばありそう。
少々理解がおぼつかなくなってきたので今回はここまでに。
次回は内包表記へ。正直ちょっと苦手意識があったりします。