2010-02-02 7 views

Répondre

8

Il suffit d'utiliser une étape de 2:

range(start, end, step) 
5

Essayez:

range(0, 10, 2) 
0
>>> if 100 % 2 == 0 : print "even" 
... 
even 
6

Je ne sais pas si c'est ce que vous voulez entendre, mais il est assez trivial de filtre sur les valeurs impaires avec la compréhension de la 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 de taille étape facultative pour range compter par 2.

+0

Vous pouvez aussi écrire 'map (lambda x: x * 2, range (0, 50))' – SLaks

+0

Complétez cette dernière compréhension pour obtenir les cotes: cotes = [x pour x dans la gamme (100) si x & 1! = 0] –

0
#This is not suggestible way to code in Python, but it gives a better understanding 


numbers = range(1,10) 

even = [] 

for i in numbers: 

    if i%2 == 0: 

     even.append(i) 
print (even) 
-1
a = [1, 4, 9, 16, 25, 36, 49, 64, 81, 100] 

b = [i for i in a if i % 2 == 0] 

print("Original List -->", a,"\n") 
print("and the Even Numbers-->", b) 
+0

Merci pour votre contribution. Notez qu'il s'agit d'une très vieille question qui contient déjà de nombreuses bonnes réponses. En particulier, [la réponse de Sapph] (https://stackoverflow.com/a/2184774/2124834) contient déjà la technique que vous décrivez. – Marein

0

Il y a aussi quelques façons d'écrire un itérateur paresseux et infini de nombres pairs.

Nous allons utiliser le module itertools et more_itertools1 pour faire itérateurs émulant 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 les dernières options peuvent générer une suite infinie des nombres pairs, 0, 2, 4, 6, ....

Vous pouvez traiter comme tout ce générateur de plus les boucles, ou vous pouvez sélectionner n numéros de la séquence via itertools.islice ou take de la itertools recipes .: par exemple

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

Cela équivaut à list(range(0, 20, 2)). Cependant, contrairement à range(), l'itérateur est en pause et donnera le prochain lot de chiffres même si elle est exécutée à nouveau:

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

Détails

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

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

1 Un paquet tiers qui met en œuvre de nombreux outils utiles, y compris itertools recipes tels que take et tabulate.

Questions connexes