最近、python力向上のため某サイトでプログラミング問題を解きまくっている。
入力データのプリプロセスで可変長引数が使えることに気付いたのでメモ。
各問題の入力データは、例えば以下のような形式が標準入力から与えられる。
市区町村名 人口 面積
shinjyuku 341009 18.22
・・・
1行に複数の型、特に先頭が文字列で、後続はすべて数値なパターン。
標準入力から読み取ったデータは文字列型として格納されるため、
数値データに関しては変換が必要となる。
>>> name, population, area = input().split(' ')
shinjyuku 341009 18.22
>>> name
'shinjyuku'
>>> population
'341009'
>>> area
'18.22'
こうすると、変数ごとに数値変換する必要があるため面倒になる。
なので、数値部分はまとめてリストに放り込みたい。
>>> name, data = input().split(' ')
shinjyuku 341009 18.22
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: too many values to unpack (expected 2)
unpackされた複数の値を単純に1つの変数dataに代入しようとすると、
変数が足りないと怒られる。そこで可変長引数を使う。
>>> name, *data = input().split(' ')
shinjyuku 341009 18.22
>>> name
'shinjyuku'
>>> data
['341009', '18.22']
メソッド引数の話でよく見聞きする可変長引数ですが、こんな使い方もあるんですね。
ただ、この場合「可変長引数」っていう呼ぶのに違和感あるなぁ。