range()
e xrange()
funzionano per numeri a 10 cifre. Ma che ne dici di numeri a 13 cifre? Non ho trovato nulla nel forum.intervallo e xrange per numeri a 13 cifre in Python?
risposta
si potrebbe provare questo. Stessa semantica gamma:
import operator
def lrange(num1, num2 = None, step = 1):
op = operator.__lt__
if num2 is None:
num1, num2 = 0, num1
if num2 < num1:
if step > 0:
num1 = num2
op = operator.__gt__
elif step < 0:
num1 = num2
while op(num1, num2):
yield num1
num1 += step
>>> list(lrange(138264128374162347812634134, 138264128374162347812634140))
[138264128374162347812634134L, 138264128374162347812634135L, 138264128374162347812634136L, 138264128374162347812634137L, 138264128374162347812634138L, 138264128374162347812634139L]
Un'altra soluzione sarebbe utilizzando itertools.islice
, come suggerito in xrange
s' documentation
+1 per il riferimento 'itertools.islice' – jfs
a 64 bit Python:
>>> xrange(9999999999999)
xrange(9999999999999)
Non vorrei usare range()
per un numero a 13 cifre. La mia povera macchina non sarebbe in grado di contenere la lista risultante.
Ottengo 'OverflowError: long int troppo grande per convertire in int' on Python 2.5 se provo questo. –
Interessante. Sto eseguendo 2.6 qui. Aggiornato. –
Ottengo 'OverflowError' in 2.6.2. – MAK
Non penso che funzionerà. Funzioni come len
si aspettano che il risultato si adatti a un intero di 4 byte, a causa delle restrizioni nell'implementazione cPython.
In Python 3.0:
>>> range(9999999999999)
range(0, 9999999999999)
Sembra che funziona, ma ...
>>> len(range(9999999999999))
Traceback (most recent call last):
File "<pyshell#2>", line 1, in <module>
len(range(9999999999999))
OverflowError: Python int too large to convert to C ssize_t
Vedi here per una questione connessa.
Nessun problema con la creazione dell'intervallo, purché non si desideri 10 ** 13 elementi, ad es.
range(10**14,10**15,10**14)
dà
[100000000000000, 200000000000000, 300000000000000, 400000000000000, 500000000000000, 600000000000000, 700000000000000, 800000000000000, 900000000000000]
Questo non funziona con xrange, che funziona solo su numeri a 32 bit (su sistemi a 32 bit). –
È vero. Il mio sistema è a 64 bit, quindi xrange funziona solo su sys.maxint = 2^63-1 circa 10^19. – Ramashalanka
gamma (x) restituisce un list.Python elenca gergo contengono che molti elementi. Dovresti usare xrange() per scorrere queste cifre se hai bisogno di fare trilioni di cicli.
range() e xrange() funzionano in versioni abbastanza recenti di Python; tuttavia, in 2.5 o meno dovrai aggirare la conversione da int a long.
def irange(start, stop=None, step=1):
if stop is None:
stop = long(start)
num = 1L
else:
stop = long(stop)
num = long(start)
step = long(step)
while num < stop:
yield num
num += step
Questa non è una soluzione completa (non gestisce fasi negative), ma dovrebbe farti andare.
se avete bisogno di enumerazione intero provare a utilizzare itertools:
itertools.count(1000000000000)
non dovrebbe allocare memoria per un elenco di elementi 1000000000000
La differenza tra range() e xrange() è che i primi restituisce l'intero elenco, mentre il secondo restituisce un generatore che genera ogni numero in base alle necessità. Il secondo dovrebbe funzionare per qualsiasi numero, non importa quanto grande.
In Python 3.0, xrange() è scomparso e range() si comporta come xrange() in precedenza.
' xrange' non funziona per numeri arbitrariamente grandi. –
Per sollution di questo problema che non è necessario un numero così a lungo, perché è necessario solo fattori primi, è possibile utilizzare radice quadrata:
for i in xrange(2, int((n+1)**0.5)):
- 1. Riferimenti a cifre con numeri in Sfinge e Testo ricostruito
- 2. Numeri casuali in un intervallo
- 3. Numeri in Javascript e intervallo effettivo
- 4. Csvwrite con numeri superiori a 7 cifre
- 5. python: intervallo di numeri per regex matching string
- 6. cosa è più veloce in Python "mentre" o "per xrange"
- 7. Come convertire un timestamp Unix a 13 cifre in data e ora?
- 8. PermissionError: [Errno 13] in python
- 9. Come leggere numeri a più cifre in brainfuck
- 10. Contare tutti i numeri con cifre univoche in un determinato intervallo
- 11. Qualunque importazione __future__ per incompatibilità range-xrange?
- 12. numeri analisi con più cifre in Prolog
- 13. numeri FORMAT per cifre significative bene in R
- 14. Alternativa a 'for i in xrange (len (x))'
- 15. cifre separatori per grandi numeri in codice C#
- 16. Perché la funzione uniqid di PHP restituisce solo 13 cifre e non 14?
- 17. Come ottenere l'ora corrente come numero intero a 13 cifre in Ruby?
- 18. Nome 'xrange' non è definito in Python 3
- 19. javascript/jquery numero casuale compreso tra -13 e 13 esclusi i numeri compresi tra -3 e 3
- 20. Intervallo di confidenza per LOWESS in Python
- 21. Elimina cifre in Python (Regex)
- 22. Come filtrare i numeri che contengono cifre univoche?
- 23. numeri estratto da stringa per creare cifre solo stringa
- 24. Separare i numeri lunghi di 3 cifre
- 25. intersezione intervallo data python
- 26. Seed() e numeri casuali in Python
- 27. Seaborn mostrando notazione scientifica in heatmap per i numeri a 3 cifre
- 28. Python 2: perché xrange non è chiamato irange?
- 29. MySQL - Aggiungi numeri 0 a numeri con meno di 9 cifre
- 30. Controllo della divisibilità per (sorta di) grandi numeri in python
correlati: http://stackoverflow.com/questions/2128989/python-len-and-size-of-ints –
Che cosa stai cercando di fare esattamente? Perché hai bisogno di intervalli così grandi? –
Provo a risolvere il progetto numero 15 di eulero. Forse dovrei fare una nuova domanda. – kame