初心者向けPython3勉強会:拡張スライス操作・制御フロー文
諸注意
コンテナオブジェクト
前稿ではコンテナオブジェクトについて以下のような説明をしました
str
,list
,tuple
,dict
は、コンテナオブジェクトと呼ばれ、複数のオブジェクトをまとめることができます
Javaでいう配列やリストがこれにあたります。ただし、Javaの配列と違い、動的確保をすることができます
list
は[]
、tuple
は()
、dict
は{}
、でそれぞれ定義できます動的確保 :配列などを宣言する際に、変数などを用いて宣言する方法です
変数の値に応じて配列の大きさを設定できます
本稿では上記で説明されている動的確保に加え、拡張スライス操作、制御フロー文について説明をしていきます
拡張スライス操作
前稿でスライス操作について説明しましたが、それを復習しつつ拡張スライス操作について学んでいきましょう
まずおさらいです
list型である
line
という変数に対し、line[i:j]
と書くとline
のi
番目からj-1
番目の要素を取り出すことができます
拡張スライス操作ではこれに加え、ステップ数を設定できます
変数が増えてきてi
やj
ではわかりづらいので、i
をstart
,j
をgoal
,ステップ数をstep
とします
先ほどの説明を拡張スライス操作を加味して言い換えると、
list型であるline
という変数に対しline[start:goal:step]
と書くと
line
のstart
番目からgoal-1
番目の要素をstep-1
段飛ばしで取り出すことができます
このようになります。ちょっと何言ってるのかよくわかんない
手を動かしましょう!
line = list(range(10))
print(line[1:8])
# > [1,2,3,4,5,6,7]
print(line[1:8:2])
# > [1,3,5,7]
print(line[1:8:3])
# > [1,4,7]
step
を定義することによって、listの値が飛び飛びになっていますよね
ちなみに、start
もgoal
もstep
も省略することができます
省略した場合、それぞれ0
,-1
,1
をとります
line = [0,1,2,3,4,5,6,7,8,9]
print(line[1::2])
# > [1,3,5,7,9]
print(line[:7:3])
# > [0,3,6]
print(line[2:6:]) # line[2:6] と同じ
# > [2,3,4,5]
print(line[::3])
# > [0,3,6,9]
print(line[4::]) # line[4:] と同じ
# > [4,5,6,7,8,9]
print(line[:5:]) # line[:5] と同じ
# > [0,1,2,3,4]
print(line[::]) # line[:]と同じ
# > [0,1,2,3,4,5,6,7,8,9]
step
が省略されている場合は、普通のスライス操作と同じなので2つ目の:
は省略できますね
また、値が減っていくような数列はstep
で負の値を指定すれば実装できます
(start
とgoal
だけでは実装できないことに注意してください)
制御フロー文
制御フロー文とは、条件式を基にプログラムの処理の流れを変えることができる文型です
Pythonではif
やwhile
,for
などが挙げられます。他言語を経験されている方は、switch
,do-while
などもご存知なのではないでしょうか
if文
if文は、条件式によって処理の分岐を行う制御フロー文です
前稿で学んだブール演算、比較演算を利用して分岐命令が記述できます
x = 10
if x > 5 :
print('xは5より大きい')
# > xは5より大きい
ここで前稿で触れたオフサイドルールがでてきます
ブロックの記述方法
Javaなどでは、if文やfor文といったブロックを、中括弧
{}
で囲んで記述していたかと思います
Pythonでは中括弧は使わず、インデントを使用してブロックを記述します
このように、インデントが構文規則定められている規則を オフサイドルール と言います
Pythonではインデントを使って、制御フロー文を記述します
上記のコードでは、print
の前に半角スペース4文字分のインデントがあります
また、if文の最後尾にある:
も忘れないでください。「ここから分岐しますよ」という意味になるので、忘れてしまうとエラーになります
次に、初めの条件式がFalseだった場合の処理を追加してみましょう
x = 3
if x > 5 :
print('xは5より大きい')
elif x > 0:
print('xは0より大きく5以下である')
else :
print('xは0以下である')
# > xは0より大きく5以下である
elif :
で追加の条件を付け加えることができます。前の条件式がFalseだった場合、実行されます
else :
でelif
を含めた全ての条件式がFalsだった場合の処理を記述できます
elif
部は何個でも記述できますが、else
部は最大で1個だけです
どちらも前述されているように、省略することができます
これらは他言語におけるswitch
文やcase
文と同じ記述ができます
while文
while文は、条件式によって繰り返し処理を行う制御フロー文です
条件式がTrueの間、記述した処理を繰り返します
x = 0
while(x < 10) :
print(x)
x = x + 1
# > 0
# > 1
# > 2
# > 3
# > 4
# > 5
# > 6
# > 7
# > 8
# > 9
上記の処理ではx < 10
より、xが10未満の間while文の処理が実行されるようになります
for文
for文は、コンテナオブジェクトを利用する制御フロー文です
指定したコンテナオブジェクトから1つずつ要素を取り出して処理を行います
for i in range(10) :
print(i)
# > 0
# > 1
# > 2
# > 3
# > 4
# > 5
# > 6
# > 7
# > 8
# > 9
おわりに
拡張スライス操作、制御フロー文、いかがでしたでしょうか?
前稿と本稿を理解いただければ、Pythonの基礎の基礎は修了です、お疲れ様でした!
次稿から他の言語には(ほぼ)ないPython独自の記法について説明していきたいと思います
ご興味あれば、ぜひ一読よろしくお願いします!
また、本稿について不明点・修正点などございましたら、是非コメントの方によろしくお願いいたします