シーケンスとマッピングのマッチング
リストとdictを分解します
「シーケンスとマッピングのマッチング」はCoddyKit上の無料Python Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはPython Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Python Academyコースには全4レッスンが含まれています。
デストラクチャリングを行うパターン
matchの真の力はデストラクチャリングにあります。シーケンスパターンとマッピングパターンを使うと、データの構造を確認しながら、同時に値を取り出せます。
固定長リストとのマッチング
角かっこで囲んだシーケンスパターンは、指定した長さと完全に一致するリストまたはタプルにマッチし、各要素を名前に束縛します。
point = [3, 4]
match point:
case [x, y]:
print('x =', x, 'y =', y)長さも一致する必要がある
2要素のパターンは、3要素のシーケンスにはマッチしません。各caseでは構造と長さの両方が確認されます。
data = [1, 2, 3]
match data:
case [a, b]:
print('pair')
case [a, b, c]:
print('triple:', a, b, c)リテラルとキャプチャの組み合わせ
一部の位置をリテラルで固定し、残りをキャプチャできます。これにより、指定したリテラルで始まるシーケンスだけにマッチさせられます。
command = ['move', 10, 20]
match command:
case ['move', dx, dy]:
print('moving by', dx, dy)
case ['stop']:
print('stopping')*による残りのキャプチャ
アスタリスク付きの名前は、残りの要素をすべてリストとしてキャプチャします。拡張アンパックとよく似た動作です。
items = [1, 2, 3, 4, 5]
match items:
case [first, *rest]:
print('first:', first)
print('rest:', rest)空のパターンと単一要素のパターン
シーケンスパターンを使うと、空のリスト、1要素のシーケンス、複数要素のシーケンスといった境界ケースをすっきり処理できます。
def describe(seq):
match seq:
case []:
return 'empty'
case [x]:
return 'one: ' + str(x)
case [x, *rest]:
return 'many, first ' + str(x)
print(describe([]))
print(describe([9]))
print(describe([1, 2, 3]))辞書とのマッチング
マッピングパターンでは波かっこを使います。指定したキーが存在することを確認し、その値を束縛します。対象に余分なキーがあっても構いません。
event = {'type': 'click', 'x': 10, 'y': 20}
match event:
case {'type': 'click', 'x': x, 'y': y}:
print('click at', x, y)一部のキーとのマッチング
マッピングパターンで必要になるのは、指定したキーだけです。それ以外のキーは無視されるため、オプションのフィールドを持つメッセージに適しています。
event = {'type': 'key', 'code': 'A', 'extra': 1}
match event:
case {'type': 'key', 'code': code}:
print('key pressed:', code)残りのキーのキャプチャ
**restを使うと、マッチしなかったキーと値の組をすべて辞書にキャプチャできます。
event = {'type': 'move', 'dx': 5, 'dy': 7}
match event:
case {'type': 'move', **rest}:
print('move details:', rest)パターンのネスト
パターンは自由にネストできます。リストを含む辞書にマッチさせ、両方を同時にデストラクチャリングすることも可能です。
data = {'name': 'grid', 'size': [3, 4]}
match data:
case {'name': name, 'size': [w, h]}:
print(name, 'is', w, 'by', h)ここでは文字列はシーケンスではない
シーケンスパターンは、反復可能であるにもかかわらず、文字列やバイト列には意図的にマッチしません。これにより、文字列が文字単位で意図せずデストラクチャリングされるのを防ぎます。
value = 'hi'
match value:
case [a, b]:
print('matched as sequence')
case str():
print('matched as string')確認問題
[1, 2, 3, 4]に対してパターン[first, *rest]がマッチした場合、何が束縛されますか?
まとめ
リストと辞書をデストラクチャリングする方法を学びました。
- シーケンスパターンは長さを確認し、各要素を束縛します。
*restは残りのリスト要素をキャプチャします。- マッピングパターンはキーにマッチし、余分なキーも許容します。
**restは残りの辞書の組をキャプチャし、パターンはネストできます。
よくある質問
「シーケンスとマッピングのマッチング」レッスンは無料ですか?
はい。「シーケンスとマッピングのマッチング」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Python Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Python Academyコースには全4レッスンが含まれています。
「シーケンスとマッピングのマッチング」で何を学びますか?
リストとdictを分解します ブラウザで直接実行するハンズオンコードでPython Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Python Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのPython Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「シーケンスとマッピングのマッチング」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このPython Academyレッスンでコードを書いて実行できますか?
はい。すべてのPython Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- matchとcaseの基礎
- シーケンスとマッピングのマッチング
- クラスパターン
- ガードとワイルドカード