Frage Wie iteriere ich über große Zahlen in Python mit Hilfe von range ()? [Duplikat]


Diese Frage hat hier bereits eine Antwort:

Ich möchte eine große Zahl wie 600851475143 mit der Funktion range () in Python iterieren. Aber wenn ich das Programm starte, bekomme ich einen OverflowError. Ich habe den folgenden Code verwendet -

um = long(raw_input())
for j in range(1,num):
....

Ich habe es oft versucht, aber es funktioniert nicht!


5
2018-03-31 01:48


Ursprung


Antworten:


Benutzen itertools.islice() wenn Ihre Indizes lange Zahlen sind:

from itertools import islice, count
islice(count(start, step), (stop-start+step-1+2*(step<0))//step)

Pythons 3 range() Kann auch Python Longs verarbeiten.

Vereinfacht auf Ihren Fall:

for j in islice(count(1), num - 1):

5
2018-03-31 01:51



Obwohl xrange scheint zu erreichen, was Sie wollen, kann es nicht mit so großen Zahlen umgehen. Möglicherweise müssen Sie dieses Rezept von verwenden Hier

CPython-Implementierungsdetail: xrange () soll einfach und schnell sein. Implementierungen können Einschränkungen auferlegen, um dies zu erreichen. Die C-Implementierung von Python beschränkt alle Argumente auf native C-Longs ("kurze" Python-Integer) und erfordert außerdem, dass die Anzahl der Elemente in ein natives C-Long passt. Wenn ein größerer Bereich benötigt wird, kann eine alternative Version mit dem itertools-Modul erstellt werden: islice(count(start, step), (stop-start+step-1+2*(step<0))//step).


2
2018-03-31 01:51



Verwenden Sie nicht für, verwenden Sie während

counter = long(1)
while counter < num:
    ...

1
2018-03-31 04:09