web-dev-qa-db-ja.com

map(int、raw_input()。split())を使用する

私はpythonがとても好きですが、同じ行で複数の整数入力を取得する必要がある場合は、C/C++を好みます。Pythonを使用する場合は、次を使用します。

a = map(int, raw_input().split())

これが唯一の方法ですか、それともPythonでそれを行う方法はありますか?そして、これは時間の考慮される限り多くの費用がかかりますか?

8
Aswin Murugesh

関数が組み込まれたマップを使用している場合は、LCよりもわずかに高速になる可能性があります。

>>> strs = " ".join(str(x) for x in xrange(10**5))
>>> %timeit [int(x) for x in strs.split()]
1 loops, best of 3: 111 ms per loop
>>> %timeit map(int, strs.split())
1 loops, best of 3: 105 ms per loop

ユーザー定義関数の場合:

>>> def func(x):
...     return int(x)

>>> %timeit map(func, strs.split())
1 loops, best of 3: 129 ms per loop
>>> %timeit [func(x) for x in strs.split()]
1 loops, best of 3: 128 ms per loop

Python 3.3.1の比較:

>>> strs = " ".join([str(x) for x in range(10**5)])
>>> %timeit list(map(int, strs.split()))
10 loops, best of 3: 59 ms per loop
>>> %timeit [int(x) for x in strs.split()]
10 loops, best of 3: 79.2 ms per loop

>>> def func(x):                         
    return int(x)
... 
>>> %timeit list(map(func, strs.split()))
10 loops, best of 3: 94.6 ms per loop
>>> %timeit [func(x) for x in strs.split()]
1 loops, best of 3: 92 ms per loop

から Pythonパフォーマンスのヒント ページ:

唯一の制限は、マップの「ループ本体」が関数呼び出しでなければならないということです。リスト内包表記の構文上の利点に加えて、それらは多くの場合、マップの同等の使用と同じかそれよりも高速です。

4

リスト内包表記!

直感的でPythonic:

a = [int(i) for i in raw_input().split()]

ここでこの議論をチェックしてください: Pythonリスト内包表記対マップ

7
phil-ociraptor

あなたはこれを使うことができます:

s = raw_input().split()
s = [int(i) for i in s]
0
Tanay Agrawal