Python: タプルに内包表記はないけど、代替方法はある

Pythonで内包表記が可能なのはリスト、辞書、集合です。 タプルは内包表記ができませんが、代わりとなる方法はあります。 ここではその方法を紹介します。

まずはリスト内包表記の書式を確認しておきます。

リスト内包表記の書式
[式 for 変数 in イテラブルなオブジェクト (if 条件)]

リスト内包表記の両端の角括弧[]の部分を丸括弧()に変更しても、 タプルは作成できません。 次のコードはNGの例です。 タプル tを基に、要素を2倍にした新しいタプル t2を「丸括弧()を使って」 作成しようとしています。

NGの例
t = (1, 2, 3)

t2 = (v * 2 for v in t)

print(t2)

# 実行結果
<generator object <genexpr> at 0x0000014C6FC51A50>

上記の方法ではタプルは作成できません。

代替方法として組み込みのタプルのコンストラクタ tuple()を使用します。
tuple() — Python ドキュメント

書式
tuple([iterable])

先程のコードにtuple()を使うだけでタプルが作成できます。

t = (1, 2, 3)

t2 = tuple(v * 2 for v in t)

print(t2)

# 実行結果
(2, 4, 6)

組み込みのtuple()を使ってタプルを作成していますが、 実質的には内包表記が使えていますから 代替方法としてはこれで十分だと思います。

Python