2010-02-02 4 views

Antwort

48

Range has three parameters.

Sie range(0, 10, 2) schreiben können.

+4

Wie xrange() – Will

+7

+1 für tatsächliche Links zu docs ... warum tun so wenige Leute stören? –

8

Verwenden Sie einfach einen Schritt 2:

range(start, end, step) 
5

Versuchen:

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

Ich weiß nicht, ob dies ist, was Sie hören wollen, aber es ist ziemlich trivial Filter aus ungeraden Werten mit Listenverständnis.

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

oder

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

Sie auch den optionalen Schritt Größenparameter für range zählen durch 2.

+0

Sie könnten auch 'map (lambda x: x * 2, range (0, 50)) 'schreiben – SLaks

+0

Ergänzen Sie das letzte Verständnis um Odds zu erhalten: odds = [x für x im Bereich (100) wenn 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

Danke für Ihren Beitrag. Beachten Sie, dass dies eine sehr alte Frage ist, die bereits viele gute Antworten enthält. Insbesondere enthält [die Antwort von Sapph] (https://stackoverflow.com/a/2184774/2124834) bereits die Technik, die Sie beschreiben. – Marein

0

Es gibt auch ein paar Möglichkeiten nutzen könnten, um zu schreiben ein fauler, unendlicher Iterator mit geraden Zahlen.

Wir werden das itertools Modul verwenden und more_itertools1 Iteratoren zu machen, die range() emulieren.

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) 

Alle der letzteren Optionen können eine unendliche Folge von geraden Zahlen, 0, 2, 4, 6, ... erzeugen.

Sie können diese wie jeder Generator behandeln, indem über sie Looping, oder Sie können n Zahlen aus der Folge über itertools.islice oder take vom itertools recipes beispiels wählen .:

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

Dies zu list(range(0, 20, 2)) entspricht. Doch im Gegensatz zu range() wird der Iterator pausieren und wird die nächste Charge von geraden Zahlen ergibt, wenn wieder läuft:

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

Einzelheiten

Die Optionen präsentiert wird alle unendlich Iteratoren dass start mit einem Ganzzahl, dh 0.

  • a. itertools.count ergibt den nächsten um step=2 inkrementierten Wert (siehe equivalent code).
  • b. more_itertools.tabulate ist eine itertools recipe, die eine Funktion auf jeden Wert einer Nummernzeile abbildet (siehe source code).
  • c. more_itertools.iterate ergibt den Startwert (0). Es wendet dann eine Funktion auf das letzte Element an (inkrementiert um 2), liefert das Ergebnis und wiederholt diesen Prozess (siehe source code).

1 Ein Drittanbieter-Paket, das viele nützliche Tools implementiert, einschließlich itertools recipes wie take und tabulate.