Cat & Code & Crimson

思索と技術が交差する場所

Tips #18:pathlib でファイル操作を効率化(Python実践スキル)

この Tips シリーズでは、#9 までに基本的なデータ構造を整理し、#10 以降は Python イディオム(Python 特有の慣用的な書き方)を紹介してきました。
今回からは、実務で役立つ Python実践スキル を扱います。初回は、ファイル操作の基本となる pathlib を整理します。

なぜ pathlib ?:ファイルやディレクトリの扱いは、多くのスクリプトやツールで避けて通れません。pathlib を使うことで、OS差異を意識せず、読みやすく安全なコードを書くことができます。

続きを読む

Tips #17: itertools の使い方と便利な関数(Pythonイディオム)

この Tips シリーズでは、#9 までに基本的なデータ構造を整理し、#10 以降は Python イディオム(Python 特有の慣用的な書き方)を紹介しています。
今回は、#11 (zip の使い方)zip_longest でも登場した標準ライブラリ itertools を整理します。

itertools は、「for 文を書かずにイテレーションを組み立てる」ための道具箱のようなモジュールです。
ここでは用途の方向性が異なるため、代表的な関数を次の3つに分けて見ていきます。


1. イテレータをつなげる

1-1. chain(複数のリストを連結)

chain は、複数のイテラブルを1本のイテレータとして順番につなげます。


import itertools

it = itertools.chain([1, 2, 3], [4, 5, 6])
list(it)
# [1, 2, 3, 4, 5, 6]

いつ使うか: 複数のリストやファイルの内容を順番に処理したいとき。+ 演算子と違い、メモリ効率が良いです。

続きを読む

Tips #16:any / all の使い分けと注意点(Pythonイディオム)

この Tips シリーズでは、#9 までに基本的なデータ構造を整理し、 #10 以降は Python イディオム(Python 特有の慣用的な書き方)を紹介しています。
今回は、#13 (リスト内包表記) でも便利な使い方として触れた any / all の使い分け を整理します。


1. 基本的な使い方

組み込み関数 all() は、すべての要素が真 であれば True を返します。
any() は、1つでも真の要素があれば True を返します。


cats = ["chii", "mui", "teto"]

# すべての猫の名前は10文字未満か?
all(len(cat) < 10 for cat in cats)
# True

# 名前が4文字を超える猫はいるか?
any(len(cat) > 4 for cat in cats)
# False

続きを読む

Tips #15:map / filter の使い方(Pythonイディオム)

この Tips シリーズでは、#9 までに基本的なデータ構造を整理し、 #10 以降は Python イディオム(Python 特有の慣用的な書き方)を紹介しています。
今回は、内包表記(#13 リスト内包表記#14 辞書内包表記)との比較で登場してきた map / filter を整理します。


1. map / filter の基本

1.1 map

map(function, iterable) は、iterable の各要素に function を適用します。
戻り値はリストではなくイテレータ です。


cats = ["chii", "mui", "teto"]
list(map(lambda x: x + "_chan", cats))
# ['chii_chan', 'mui_chan', 'teto_chan']

続きを読む

Tips #14:辞書内包表記の使い方(Pythonイディオム)

この Tips シリーズでは、#9 までに基本的なデータ構造を整理し、 #10(enumerate)#11(zip)#12(sorted)#13(リスト内包表記)で Pythonic な書き方を紹介してきました。
今回はその続編として、辞書内包表記を取り上げます。


1. 基本コード例

辞書内包表記では、キーと値の対応関係{key: value for ...} の形で簡潔に記述できます。

続きを読む

Tips #13:リスト内包表記の使い方(Pythonイディオム)

この Tips シリーズでは、#9 までに基本的なデータ構造を整理し、 #10(enumerate)#11(zip)#12(sorted) では Pythonic な書き方を紹介してきました。
今回は、Pythonらしいコードを書く上で絶対に外せない リスト内包表記 をまとめます。

リスト内包表記は Pythonイディオム(Python特有の慣用的な書き方) の代表例です。
これにより、次の効果が期待できます。

  • コードが短く・明確になる
  • 不要な .append() を減らせる
  • map()filter() の多くを置き換えられる
  • 処理の流れが読みやすい(左 → 右に評価される)
続きを読む

Tips #12:sorted の使い方(Pythonイディオム)

この Tips シリーズでは、#9 までにデータ構造を整理し、#10(enumerate)#11(zip)で Pythonic な書き方を紹介してきました。
今回は、実務でも使用頻度が非常に高い sortedkey の使い方をまとめます。

この記事で学べること:

  • sorted の基本的な使い方
  • key と lambda を使った柔軟なソート
  • 降順、辞書のソート
  • 複合キー、安定ソート
続きを読む