Qualcuno sa se Python ha una funzione integrata per lavorare per stampare valori pari. Come range() per esempio.Numeri pari in Python
Grazie
Qualcuno sa se Python ha una funzione integrata per lavorare per stampare valori pari. Come range() per esempio.Numeri pari in Python
Grazie
è possibile scrivere range(0, 10, 2)
.
Basta usare un passo di 2:
range(start, end, step)
Prova:
range(0, 10, 2)
>>> if 100 % 2 == 0 : print "even"
...
even
Non so se questo è ciò che si desidera ascoltare, ma è abbastanza banale da filtro fuori valori dispari con la comprensione delle liste.
evens = [x for x in range(100) if x%2 == 0]
o
evens = [x for x in range(100) if x&1 == 0]
Si potrebbe anche utilizzare il parametro del passo facoltativo per range
a contare da 2.
Puoi anche scrivere 'map (lambda x: x * 2, range (0, 50))' – SLaks
Completa l'ultima comprensione per ottenere quote: odds = [x per x nel range (100) se x & 1! = 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)
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)
Grazie per il tuo contributo. Si noti che questa è una domanda molto vecchia che contiene già molte buone risposte. In particolare, [la risposta di Sapph] (https://stackoverflow.com/a/2184774/2124834) contiene già la tecnica che stai descrivendo. – Marein
Ci sono anche un paio di modi per scrivere un pigro, infinito iteratore di numeri pari.
useremo il modulo itertools
e more_itertools
1 fare iteratori che emulano 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)
Tutte le ultime opzioni in grado di generare una sequenza infinita di numeri pari, 0, 2, 4, 6, ...
.
si può trattare questi come qualsiasi generatore da loop su di loro, oppure è possibile selezionare n
numeri della sequenza tramite itertools.islice
o take
dal itertools recipes es .:
mit.take(10, a)
# [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
Ciò equivale a list(range(0, 20, 2))
. Tuttavia, a differenza range()
, l'iteratore è in pausa e produrrà il prossimo gruppo di numeri pari se eseguire di nuovo:
mit.take(10, a)
# [20, 22, 24, 26, 28, 30, 32, 34, 36, 38]
dettagli
Le opzioni presentate sono tutte iteratori infiniti che start
con una intero, ovvero 0
.
itertools.count
restituisce il valore successivo incrementato di uno step=2
(vedere equivalent code).more_itertools.tabulate
è un itertools recipe che associa una funzione a ciascun valore di una linea numerica (vedere source code).more_itertools.iterate
restituisce il valore iniziale (0
). Quindi applica una funzione all'ultima voce (incrementando di 2), produce quel risultato e ripete questo processo (vedere source code).1 Un pacchetto di terze parti che implementa molti strumenti utili, tra cui itertools recipes come ad esempio take
e tabulate
.
Come xrange() – Will
+1 per i collegamenti effettivi ai documenti ... perché così poche persone si preoccupano? –