web-dev-qa-db-fra.com

using map (int, raw_input (). split ())

Bien que j'aime beaucoup le python, quand je dois obtenir plusieurs entrées entières dans la même ligne, je préfère le C/C++. Si j'utilise python, j'utilise:

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

Est-ce le seul moyen ou existe-t-il un moyen pythonique de le faire? Et cela coûte-t-il beaucoup dans la mesure où le temps est compté?

8
Aswin Murugesh

Si vous utilisez une carte avec une fonction intégrée, elle peut être légèrement plus rapide que 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

Avec fonction définie par l'utilisateur:

>>> 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

Comparaisons 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

De Conseils de performance Python page:

La seule restriction est que le "corps de boucle" de la carte doit être un appel de fonction. Outre l'avantage syntaxique de la compréhension de liste, elles sont souvent aussi rapides ou plus rapides que l'utilisation équivalente de map.

4
Ashwini Chaudhary

Liste compréhensions!

Intuitif et Pythonique:

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

Découvrez cette discussion ici: Python List Comprehension Vs. Carte

7
phil-ociraptor

Vous pouvez utiliser ceci:

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