Python関連記事まとめ
目次
環境情報・設定
- Pythonのバージョンを確認、表示(sys.versionなど)
- Pythonが実行されている環境のOSやバージョン情報などを取得
- カレントディレクトリを取得、変更(移動)
- 実行中のファイルの場所(パス)を取得する
__file__
- 環境変数を取得・追加・上書き・削除(os.environ)
- 再帰回数の上限を確認・変更(sys.setrecursionlimitなど)
コードの書き方・ルール
- Pythonはインデント(スペース4文字)でブロックを表す
- 識別子(変数名など)として有効・無効な名前、命名規則
- キーワード(予約語)一覧を確認するkeyword
- 長い文字列を複数行に分けて書く
- メソッドチェーンを改行して書く
pip(パッケージ管理)
- パッケージ管理システムpipの使い方
- pipでrequirements.txtを使ってパッケージ一括インストール
- pip list / freezeでインストール済みパッケージ一覧を確認
- pip.confを作成してpip listの警告を消す
- パッケージ(ライブラリ)のバージョンを確認
インポート
- importの使い方(from, as, PEP8の推奨スタイル, 注意点など)
- importの対象ディレクトリのパスを確認・追加(sys.pathなど)
- 相対インポートで上位ディレクトリ・サブディレクトリを指定
if __name__ == '__main__'
の意味と使い方
エラー・警告・例外処理
- 基本的なエラー一覧とその原因の確認方法
- 例外処理(try, except, else, finally)
- assertの使い方
- warningsで警告(Warning)を非表示、例外化
- pass文の意味と使い方
コメント・docstring
- コメント、コメントアウトの書き方
- docstring(ドキュメンテーション文字列)の書き方
- docstringにテストコードを記述するdoctestの使い方、書き方
- 関数アノテーションと型ヒント、typingモジュール
コマンドライン引数
標準入力・出力
型・クラス
- 型を取得・判定するtype関数, isinstance関数
- 真偽値bool型(True, False)と他の型との変換・判定
- サブクラス・スーパークラスを確認(issubclass(), __mro__など)
- hasattr(), 抽象基底クラスABCによるダックタイピング
- PythonにおけるNoneの判定
演算子
- 算術演算子(四則演算、べき乗、リスト・文字列の結合など)
- 論理演算子(論理積、論理和、否定)
- ビット演算子(論理積、論理和、排他的論理和、反転、シフト)
- ==演算子とis演算子の違い
- 複数の比較演算子を連結して記述(a < x < bなど)
- 複数の変数に複数の値または同じ値を代入
関数と引数
- 関数を定義・呼び出し(def, return)
- 可変長引数(
*args
,**kwargs
)の使い方 - デフォルト引数の使い方と注意点
- 引数にリスト、タプル、辞書を展開して渡す方法
- 複数の戻り値を返す方法
- lambda(ラムダ式、無名関数)の使い方
forループ・whileループ
- for文によるループ処理(range, enumerate, zipなど)
- enumerateとzipを組み合わせて同時に使う
- 多重ループ(ネストしたforループ)からbreak
- while文によるループ処理(無限ループなど)
if文
リスト
基礎
- Pythonのリストと配列とnumpy.ndarrayの違いと使い分け
- リストを任意の値・要素数で初期化
- リスト内包表記の使い方
- map()でリストの要素に関数・処理を適用
- filter()でリストから条件を満たす要素を抽出・削除
- リストのサイズ(要素数)を取得
- リストを比較
- in演算子でリストなどに特定の要素が含まれるか判定
- リストとタプルを相互に変換するlist(), tuple()
要素の追加・削除
要素の抽出・置換
- リストの要素のインデックス(何番目か)を取得
- スライスによるリストや文字列の部分選択・代入
- リストの特定の要素を抽出、置換、変換
- 文字列のリストの条件を満たす要素を抽出、置換
- リストの最大値・最小値から順にn個の要素を取得
- リストからランダムに要素を選択・取得
- enumerateでリストの要素とインデックスを取得
- zipで複数のリストの要素をまとめて取得
ソート・入れ替え・並べ替え
- リストをソートするsortとsortedの違い
- 任意の順番にソート(ソート順を指定)
- sorted()やmax()などで引数keyを指定
- ゼロ埋めなしの数字の文字列リストをソート
- リストや文字列を逆順に並べ替え(reverse, reversed)
- リストの要素をシャッフル(random.shuffle, sample)
- リストの値を入れ替え(交換・並べ替え)
- 2次元配列(リストのリスト)をソート
- 2次元配列(リストのリスト)の行と列を入れ替える(転置)
- flatten(多次元リストを一次元に平坦化)
- 一次元配列を二次元配列に変換(numpy.ndarray、リスト)
重複・共通要素の処理
- リストから重複した要素を削除・抽出
- リストに重複した要素があるか判定
- 複数のリストに共通する・しない要素とその個数を取得
- リストの連続する同じ値の要素をグループ化(itertools.groupby)
その他
- 浅いコピーと深いコピー: copy(), deepcopy()
- 文字列のリストと数値のリストを相互に変換
- リストの各要素の出現個数をカウントするCounter
- 複数のリストの直積(デカルト積)を生成するitertools.product
- リスト、NumPy配列、pandas.DataFrameを正規化・標準化
タプル
辞書
- 辞書を作成するdict()と波括弧、辞書内包表記
- 辞書に要素を追加・更新
- Pythonで辞書同士を結合(連結・マージ)
- 辞書の要素を削除するclear, pop, popitem, del
- 辞書にキーが存在しないときのみ要素を追加するsetdefault
- 辞書のキー・値の存在を確認、取得(検索)
- 辞書のgetメソッドでキーから値を取得(存在しないキーでもOK)
- 辞書の値からキーを抽出
- 辞書のforループ処理(keys, values, items)
- 辞書のキー名を変更
- 辞書のキーと値を入れ替える
- 辞書の値の最大値・最小値とそのキーを取得
- 複数の辞書のキーに対する集合演算(共通、和、差、対称差)
- 辞書のリストから特定のキーの値のリストを取得
- 辞書のリストを特定のキーの値に従ってソート
- 順序付き辞書OrderedDictの使い方
文字列
基礎
- 文字列生成(引用符、strコンストラクタ)
- 文字列の長さ(文字数)を取得
- 文字列を連結・結合(+演算子、joinなど)
- 文字列を置換(replace, translate, re.sub, re.subn)
- 文字列を分割(区切り文字、改行、正規表現、文字数)
- 文字列を検索(〜を含むか判定、位置取得)
- 文字列を比較(完全一致、部分一致、大小関係など)
- 文字列を抽出(位置・文字数、正規表現)
- 文字列の一部を削除(stripなど)
- 文字・文字列の出現回数をカウント
- 改行を含む文字列の出力、連結、分割、削除、置換
- 大文字・小文字を操作する文字列メソッド一覧
- エスケープシーケンスを無視(無効化)するraw文字列
書式変換(フォーマット)
- format関数・メソッドで書式変換(0埋め、指数表記、16進数など)
- f文字列(フォーマット済み文字列リテラル)の使い方
- 文字列・数値をゼロ埋め(ゼロパディング)
- 文字列・数値を右寄せ、中央寄せ、左寄せ
数値と変換
正規表現
Unicode
- Unicodeコードポイントと文字を相互変換(chr, ord, \x, \u, \U)
- Unicodeエスケープされた文字列・バイト列を変換
- 文字列をUnicode正規化(unicodedata.normalize)
その他
- 半角1文字、全角2文字として文字数(幅)カウント
- 全角・半角を変換(mojimojiなど)
- splitでカンマ区切り文字列を分割、空白を削除しリスト化
- 文字列を折り返し・切り詰めして整形するtextwrap
- ast.literal_eval()で文字列をリストや辞書に変換
数値
- 小数・整数を四捨五入: round(), Decimal.quantize()
- 小数点以下を切り捨て・切り上げ: math.floor(), math.ceil()
- 絶対値を取得: abs(), math.fabs()
- ランダムな小数・整数を生成: random, randrange, randintなど
- 数値の桁数、任意の桁(位)の値を取得
- 割り算の商と余りを同時に取得: divmod()
- 数値が整数か小数かを判定
- 整数部と小数部を同時に取得: math.modf()
- Python3の整数int型に最大値はない(上限なし)
- 浮動小数点数float型の範囲(最大値・最小値)
- 浮動小数点数floatの誤差を考慮して比較: math.isclose()
- 無限大を表すinfの作成・演算・判定・比較
- Pythonにおけるnanの判定
- 符号に応じて1, -1, 0を返すsign関数を実装
- 2進数の1の数をカウント: int.bit_count()
算数・数学
- Pythonで算数・数学の問題を解く
- fractionsで分数(有理数)の計算
- complex型で複素数を扱う(絶対値、偏角、極座標変換など)
- set型で集合演算(和集合、積集合や部分集合の判定など)
- 三角関数を計算(sin, cos, tan, arcsin, arccos, arctan)
- 指数関数・対数関数を計算(exp, log, log10, log2)
- 最大公約数と最小公倍数を算出・取得
- 階乗、順列・組み合わせを計算、生成
- 平均、中央値、最頻値、分散、標準偏差を算出
- 累積和・累積積(itertools.accumulate)
アルゴリズム
ファイル・ディレクトリ(フォルダ)
読み込み・書き込み・作成
- ファイルの読み込み、書き込み(作成・追記)
- ディレクトリ(フォルダ)を作成するmkdir, makedirs
- 新しいディレクトリにファイルを作成・保存
- ファイル内の任意の文字列を含む行を抽出(grep的処理)
- Web上の画像などのファイルをダウンロード(個別・一括)
削除・移動・コピー
- ファイル・ディレクトリを削除するos.remove, shutil.rmtreeなど
- ファイル・ディレクトリを移動するshutil.move
- ファイル・ディレクトリをコピーするshutil.copy, copytree
存在確認・サイズ・タイムスタンプ取得
パス(ファイル名・ディレクトリ名)の処理
- パス文字列からファイル名・フォルダ名・拡張子を取得、結合
- ファイル名・ディレクトリ名の一覧をリストで取得
- ファイル名の前後に文字列や連番を加えて一括変更
- 条件を満たすパスの一覧を再帰的に取得するglobの使い方
pathlib
- pathlibの使い方(パスをオブジェクトとして操作・処理)
- pathlibで絶対パスと相対パスを相互変換・判定
- pathlibでファイル名・拡張子・親ディレクトリを取得
- pathlibでファイルの作成・open・読み書き・削除
- pathlibでファイル一覧を取得(glob, iterdir)
- pathlibでディレクトリ(フォルダ)の作成・削除
日時(日付・時間)
- datetimeで日付や時間と文字列を変換(strftime, strptime)
- 現在時刻・日付・日時を取得
- 経過時間や日時(日付・時刻)の差分を測定・算出
- ISO 8601形式の文字列と日時datetimeを相互変換
- UNIX時間(エポック秒)と日時datetimeを相互変換
- 秒数と分・時間・日数を相互に変換
- datetime, pytzでタイムゾーンを設定・取得・変換・削除
- 日付から曜日や月を文字列(日本語や英語など)で取得
- calendarでカレンダーを取得・出力(テキスト、HTMLなど)
- 月の日数・週数を取得
- うるう年を判定・カウント・列挙
- 月初・月末(初日・最終日)、最終X曜日の日付を取得
- 第何何曜日(第2月曜日など)の日付を取得
- 任意の日付がその月の第何週目・何曜日かを取得
URL
CSV・Excel・JSON・PDF
CSV
Excel
JSON
画像処理基礎
- Pythonで画像処理: Pillow, NumPy, OpenCVの違いと使い分け
- OpenCV, Pillow(PIL)で画像サイズ(幅、高さ)を取得
- PSNRを算出(OpenCV, scikit-image, NumPy)
Web APIの例
そのほかの組み込み関数
そのほかのモジュール・ライブラリ
- ZIPファイルを圧縮・解凍するzipfile
- timeitモジュールで処理時間を計測
- itertools.count, cycle, repeatによる無限イテレータ
- operatorモジュールの使い方(itemgetterなど)
- mimetypesでMIMEタイプをファイル名(拡張子)から推定
- Joblibでシンプルな並列処理(joblib.Parallel)
- pyperclipでクリップボードを操作(コピー、ペースト、監視)
- ZBarでバーコード・QRコードを検出・読み取り
- mutagenでmp3などのID3タグを編集
- feedparserでRSS, Atomフィードを解析
- Janomeで日本語の形態素解析、分かち書き(単語分割)