はじめに
これまでの記事では、プログラムの流れを制御するif文やfor文を学びました。これらの基礎的な文法を組み合わせることで、より複雑な処理を記述できるようになります。Day4.5では、さらに一歩進んで、Pythonをより効率的かつスマートに使いこなすための応用知識と、試験でも問われるような細かい知識をまとめて解説します。
今回は早足になりますが受験に際して、ExamApp様の問題を解かせていただいて、予想通りボロボロだったので気になった点をまとめDay4.5としたいと思います。
内包表記:簡潔にリストや辞書を生成する
内包表記は、リストや辞書、セットを簡潔に生成するためのPythonの強力な機能です。for文とif文を一行で記述でき、可読性とパフォーマンスを向上させます。
リスト内包表記
リスト内包表記は、[ <式> for <変数> in <シーケンス> if <条件> ]という形式で記述します。
Python
# 5の倍数だけをリストに格納
fives = [i for i in range(50) if i % 5 == 0]
print(fives)
# 出力: [0, 5, 10, 15, 20, 25, 30, 35, 40, 45]
# for文の入れ子
nested_list = [[1, 2], [3, 4]]
flattened_list = [j for sublist in nested_list for j in sublist]
print(flattened_list)
# 出力: [1, 2, 3, 4]
辞書内包表記と集合内包表記
リストだけでなく、辞書やセットも同様に内包表記で生成できます。
Python
# 辞書内包表記
squares_dict = {x: x**2 for x in (1, 2, 3)}
print(squares_dict)
# 出力: {1: 1, 2: 4, 3: 9}
# 集合内包表記
squares_set = {x**2 for x in (1, 2, 3)}
print(squares_set)
# 出力: {1, 4, 9}
演算子:知っておくべき特殊な演算子
以前投稿した記事のとおり、Pythonには、四則演算以外にも便利な演算子が多数存在します。
また、実務で使ってこなかったという方もいらっしゃると思います。
- 剰余演算子 (%): 割り算の余りを返します。10 % 3は1になります。
- べき乗演算子 (**): 累乗を計算します。10 ** 2は100です。この演算子は優先度が高く、他の演算子より先に計算されます。
- 整数除算演算子 (//): 割り算の結果の小数点以下を切り捨てて整数を返します。10 // 3は3です。
- ※in演算子: リストや文字列に要素が含まれるかを真偽値(TrueまたはFalse)で返します。
集合演算子
セット型には、数学の集合演算を行うための演算子があります。
Python
a = {'one', 'two'}
b = {'two', 'three'}
print(a | b) # 和集合 (aまたはbまたは両方に存在する要素) -> {'one', 'two', 'three'}
print(a & b) # 積集合 (両方に存在する要素) -> {'two'}
print(a - b) # 差集合 (aに存在しbに存在しない要素) -> {'one'}
print(a ^ b) # 対称差集合 (どちらか一方にのみ存在する要素) -> {'one', 'three'}
標準ライブラリと外部ライブラリ
Pythonには、追加のインストールなしで使える標準ライブラリと、pipコマンドでインストールが必要な外部ライブラリがあります。
標準ライブラリの例
- os: オペレーティングシステムと連携する機能を提供します。os.path.join()は、OSに応じたパスの区切り文字を自動で付与するため便利です。
- sys: Pythonインタプリタやシステムに関する情報を提供します。sys.exit()はプログラムを終了させます。
- math: 高度な数学関数を提供します。math.ceil()(切り上げ)やmath.floor()(切り捨て)などがあります。
- random: 乱数を生成します。random.randint(a, b)でa以上b以下のランダムな整数を取得できます。
外部ライブラリの例
- numpy: 科学計算に特化したライブラリで、高速な配列演算を提供します。
- pandas: データ分析を効率的に行うためのライブラリです。
- requests: HTTPリクエストを簡単に送信するためのライブラリです。
知っておくべき構文と概念
if文のand表記
Pythonでは、複数の比較演算子をif 1 < x < 10:のように連結して書くことができます。これはif 1 < x and x < 10:と等価で、より簡潔に記述できます。
(個人的に、これがわからなかったのは悔しかったです。。)
例外(Exceptions)
プログラムの実行中に発生するエラーを例外と呼びます。いくつかの代表的な例外を覚えておきましょう。
- ZeroDivisionError: 0で割り算をしたときに発生します。
- NameError: 未定義の変数や関数を呼び出したときに発生します。
- TypeError: 互換性のない型間で演算を行ったときに発生します。
- KeyError: 辞書に存在しないキーを指定したときに発生します。
- IndexError: リストや文字列などのシーケンス範囲外にアクセスしようとしたときに発生します。
- ValueError: 不正な型の値を渡したときに発生します。
- FileNotFoundError: 指定したファイルパスまたはファイルが存在しない場合に発生します。
- AttributeError: オブジェクトに存在しない属性にアクセスしようとしたときに発生します。
スコープとglobal, nonlocal
Pythonは、変数が定義された場所によってその変数が有効な範囲(スコープ)が決まります。
:::note
- 関数内でglobalキーワードを使って変数を宣言すると、関数の外側のグローバル変数を変更できます。
- nonlocalキーワードは、入れ子になった関数で、一つ外側のスコープの変数を変更したいときに使います。
for-else文
for文にはelse節を付けることができます。これは、ループがbreak文で中断されずに完了した場合にのみ実行されます。(使ったことがありませんでした!)
Python
for i in range(5):
if i == 5:
break
else:
print("ループは最後まで実行されました。")
まとめ
Day4.5のまとめ
Day4.5では、内包表記や様々な演算子、そしてPythonを使いこなす上で重要な概念を幅広く学びました。これらの知識は、正直実務というより試験勉強的なニュアンスの方が強いかもしれませんが、総合的な知識として必須なのかなと思いました。
1記事ではまとまらないのでまた来週とさせていただきたく思います!