文字列を分割して数値を効率よく取得するには

Pythonで文字列を分割して数値を効率よく取得したい。

たとえば、

s = "10 20 30"

という文字列sから、変数aに10、変数bに20を設定したい。

処理時間の計測には、「Pythonで処理の時間を計測する冴えた方法」の@stop_watchデコレータを使用した。

方法1

x = s.split()
a = int(x[0])
b = int(x[1])

シンプルだが冗長に思える。

>>> @stop_watch
... def func1():
...     s = "10 20 30"
...     for i in range(999999):
...         x = s.split()
...         a = int(x[0])
...         b = int(x[1])
func1は0.6499965190887451秒かかりました

方法2

a, b, _ = map(int, s.split())

方法1より簡潔だが、実行速度は約1.5倍遅かった。
不要な3番目の値にもint()を行っているからだろうか。

>>> @stop_watch
... def func2():
...     s = "10 20 30"
...     for i in range(999999):
...         a, b, _ = map(int, s.split())
...
>>> func2()
func2は0.9099972248077393秒かかりました

方法3

a, b = map(int, s.split()[0:2])

3番目の値は不要なので、int()を適用しないようにしてみた。
若干早くなったが、方法1には及ばす。

>>> @stop_watch
... def func3():
...     s = "10 20 30"
...     for i in range(999999):
...         a, b = map(int, s.split()[0:2])
...
>>> func3()
func3は0.8530454635620117秒かかりました

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください