web-dev-qa-db-fra.com

Les nombres pairs en Python

Est-ce que quelqu'un sait si Python a une fonction intégrée à travailler pour imprimer même des valeurs. Comme range () par exemple.

Merci

17
chrissygormley

La plage a trois paramètres.

Vous pouvez écrire range(0, 10, 2).

57
SLaks

Il suffit d'utiliser une étape de 2:

range(start, end, step)
9
kgiannakakis

Essayer:

range( 0, 10, 2 )
6
ezod

Je ne sais pas si c'est ce que vous voulez entendre, mais il est assez simple de filtrer les valeurs impaires avec la compréhension de liste.

evens = [x for x in range(100) if x%2 == 0]

ou

evens = [x for x in range(100) if x&1 == 0]

Vous pouvez également utiliser le paramètre facultatif Step Size pour que range compte jusqu'à 2.

6
Sapph
>>> if 100 % 2 == 0 : print "even"
...
even
0
ghostdog74

Il y a aussi quelques façons d'écrire un nombre infini d'itérateurs paresseux et pairs. 

Nous allons utiliser le module itertools et more_itertools1 faire des itérateurs qui imitent range().

import itertools as it

import more_itertools as mit


# Infinite iterators
a = it.count(0, 2)
b = mit.tabulate(lambda x: 2 * x, 0)
c = mit.iterate(lambda x: x + 2, 0)

Toutes ces dernières options peuvent générer une séquence infinie de nombres pairs, 0, 2, 4, 6, ...

Vous pouvez traiter ceux-ci comme n'importe quel générateur en bouclant dessus, ou vous pouvez sélectionner n nombres dans la séquence via itertools.islice ou take à partir des recettes de itertools e .::

mit.take(10, a)
# [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

Ceci est équivalent à list(range(0, 20, 2)). Cependant, contrairement à range(), l'itérateur est suspendu et donnera le prochain lot de nombres pairs s'il est exécuté à nouveau:

mit.take(10, a)
# [20, 22, 24, 26, 28, 30, 32, 34, 36, 38]

Détails

Les options présentées sont tous des itérateurs infinis qui start avec un entier, c'est-à-dire 0.

  • une. itertools.count renvoie la prochaine valeur incrémentée d'un step=2 (voir code équivalent ).
  • b. more_itertools.tabulate est une recette itertools qui mappe une fonction à chaque valeur d’une ligne numérique (voir code source ). 
  • c. more_itertools.iterate renvoie la valeur de départ (0). Il applique ensuite une fonction au dernier élément (incrémentant de 2), renvoie le résultat et répète ce processus (voir code source ).

1Un package tiers qui implémente de nombreux outils utiles, notamment les recettes d'itertools tels que take et tabulate.

0
pylang