Python 内包表記
リスト内包表記は、他のリストからリストを作成できる特殊な構文であり、数値や 1 つまたは 2 つのネストされた for ループを扱う場合に非常に役立ちます。
Python 3 のチュートリアルより
リスト内包表記は、リストを作成するための簡潔な方法を提供します。[...] または、特定の条件を満たすそれらの要素のサブシーケンスを作成します。
より詳細な入門については、Python 内包表記:ステップバイステップ入門をお読みください。
リスト内包表記
既存のコレクションから新しいリストを作成する方法を For ループで示します。
# 従来の方式:for ループを使用してリストを作成
names = ['Charles', 'Susan', 'Patrick', 'George']
new_list = []
for n in names:
new_list.append(n)
new_list
['Charles', 'Susan', 'Patrick', 'George']
そして、リスト内包表記で同じことを行う方法は次のとおりです。
# リスト内包表記:新しいリストを作成するための簡潔な方法
# 構文:[expression for item in iterable]
names = ['Charles', 'Susan', 'Patrick', 'George']
new_list = [n for n in names] # すべての名前でリストを作成
new_list
['Charles', 'Susan', 'Patrick', 'George']
クイズ
ログインしてこのクイズに回答し、学習の進捗を追跡できます
リスト内包表記の基本的な構文は何ですか?
A.
[expression for item in iterable]B.
(expression for item in iterable)C.
{expression for item in iterable}D.
expression for item in iterable数値でも同じことができます。
# ネストされたリスト内包表記:2 つの範囲からタプルを作成
# ネストされた for ループと同等
n = [(a, b) for a in range(1, 3) for b in range(1, 3)]
n
[(1, 1), (1, 2), (2, 1), (2, 2)]
条件の追加
new_list に ‘C’ で始まる名前のみを含めたい場合、for ループでは次のように行います。
# 従来の方式:if 条件でフィルタリング
names = ['Charles', 'Susan', 'Patrick', 'George', 'Carol']
new_list = []
for n in names:
if n.startswith('C'): # 'C'で始まる名前をフィルタリング
new_list.append(n)
print(new_list)
['Charles', 'Carol']
リスト内包表記では、if ステートメントを最後に追加します。
# 条件付きリスト内包表記:アイテムのフィルタリング
# 構文:[expression for item in iterable if condition]
new_list = [n for n in names if n.startswith('C')]
print(new_list)
['Charles', 'Carol']
クイズ
ログインしてこのクイズに回答し、学習の進捗を追跡できます
リスト内包表記で
if条件はどこに配置されますか?A.
forキーワードの前B.
for句の後C. 式の中
D. 角括弧の前
リスト内包表記で if-else ステートメントを使用するには:
# if-else 付きリスト内包表記:条件付き式
# 構文:[expression_if_true if condition else expression_if_false for item in iterable]
nums = [1, 2, 3, 4, 5, 6]
new_list = [num*2 if num % 2 == 0 else num for num in nums] # 偶数を 2 倍にする
print(new_list)
[1, 4, 3, 8, 5, 12]
セット内包表記と辞書内包表記
list内包表記の基本は、set(集合)とdictionary(辞書)にも適用されます。
セット内包表記
# セット内包表記:内包表記の構文を使用してセットを作成
# 構文:{expression for item in iterable}
b = {"abc", "def"}
{s.upper() for s in b} # すべての文字列を大文字に変換
{"ABC", "DEF"}
辞書内包表記
# 辞書内包表記:キーと値を入れ替える
# 構文:{key_expression: value_expression for item in iterable}
c = {'name': 'Pooka', 'age': 5}
{v: k for k, v in c.items()} # キーと値を逆にする
{'Pooka': 'name', 5: 'age'}
クイズ
ログインしてこのクイズに回答し、学習の進捗を追跡できます
辞書内包表記に使用される構文は何ですか?
A.
[key: value for item in iterable]B.
(key: value for item in iterable)C.
{key_expression: value_expression for item in iterable}D.
{key, value for item in iterable}辞書からリスト内包表記を生成できます。
# 辞書からのリスト内包表記:フォーマットされた文字列を作成
c = {'name': 'Pooka', 'age': 5}
["{}:{}".format(k.upper(), v) for k, v in c.items()] # "KEY:value"としてフォーマット
['NAME:Pooka', 'AGE:5']