potisanのプログラミングメモ

趣味のプログラマーがプログラミング関係で気になったことや調べたことをいつでも忘れられるようにメモするブログです。はてなブログ無料版なので記事の上の方はたぶん広告です。記事中にも広告挿入されるみたいです。

Python3 リストやタプルの作成はfor構文を[...]*n or 内包表記に変えると要素の型指定が省略できる

型指定してコードを書く場合、for構文でひとつひとつ要素を追加するよりも[...]*nや内包表記、ジェネレーター式+tuple()を使った方が要素の型指定も省略できます。

VSCodeでは次のコードでlist[int]tuple[int, ...]などが推論されます。

#list1は型指定しなくてもlist[int]
list1 = [0]*5
#tuple1は型指定しなくてもtuple[Literal[0], ...]
tuple1 = (0,)*5

#list2は型指定しなくてもlist[int]
list2 = [x for x in range(5) if x % 2 == 0]
#tuple2は型指定しなくてもtuple[int, ...]
tuple2 = tuple(x for x in range(5) if x % 2 == 0)

対してfor構文を使うと変数宣言時の型指定が必要となります。

# list3はlist
list3 = []
for i in range(5):
    if i % 2 != 0:
        continue
    list3.append(i)

# tuple3はtuple
tuple3 = tuple(list3)