for x in y <<Überspringt listen Eintrag!!

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Iopodx
User
Beiträge: 68
Registriert: Sonntag 5. September 2004, 08:58

for x in y <<Überspringt listen Eintrag!!

Beitragvon Iopodx » Montag 14. März 2005, 17:22

Hiho Gemeinde!

Ich habe folgenden Code:

Code: Alles auswählen

from math import sqrt
from time import time
def sieb(count):
    result=[]
    times=[time(), 0, 0]
    for current in range(3, count, 2):
        if current%3!=0 and current%5!=0:
            result.append(current)
    print result
    b=0
    for current in result:
        print current
        for i in range(7, current, 2):
            if current%i==0:
                result.pop(b)
        b+=1
                       
    times[1]=time()
    times[2]=times[1]-times[0]
    return [times[2], [2, 3, 5]+result, len([2, 3, 5]+result)]

print sieb(100)[1]


So weit, so gut. Der Haken an der Sache ist, das result u.a. eine 79 enthält. Jedoch wird jene NICHT in der for Schleife berücksichtigt! Führt einfach mal den Script aus, und ihr werdet sehehn was ich meine!

Weiß einer warum das so ist, und vor Allem, wie ich das beheben kann?

Danke schonmal im vorraus!

MfG
Iopodx

PS: Soll übrigens mal das "Sieb des Erasthosthenes" werden, bzw. ähnlich dem Sieb, nur weiß ich leider nicht ob es geht wenn diverse Zahlen übersprungen werden!?
joe

Re: for x in y <<Überspringt listen Eintrag!!

Beitragvon joe » Montag 14. März 2005, 18:16

Hi
Iopodx hat geschrieben:Weiß einer warum das so ist, und vor Allem, wie ich das beheben kann?

Warum debuggst du den code nicht an der entscheidenen stelle also beim pop()-aufruf?

Code: Alles auswählen

for current in result:
        print current
        print result
        for i in range(7, current, 2):
            if current%i==0:
                print i
                result.pop(b)
                #break
        b+=1
        print result

#Ausgabe:
#[7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 77, 79, 83, 89, 91, 97]
#[7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 77, 79, 83, 89, 91, 97]
#77
#[7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 77, 79, 83, 89, 91, 97]
#7
#11
#[7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 83, 89, 91, 97]
#89



Dann siehst du daß für current gleich 77 pop() 2mal aufgerufen wird. Hab keinen schimmer worum es einklich geht, aber das scheint mir nicht gewollt zu sein. Mit dem break nach dem pop sieht es imo besser aus.
joe
Iopodx
User
Beiträge: 68
Registriert: Sonntag 5. September 2004, 08:58

Re: for x in y <<Überspringt listen Eintrag!!

Beitragvon Iopodx » Montag 14. März 2005, 18:18

joe hat geschrieben:Hi
Iopodx hat geschrieben:Weiß einer warum das so ist, und vor Allem, wie ich das beheben kann?

Warum debuggst du den code nicht an der entscheidenen stelle also beim pop()-aufruf?

Code: Alles auswählen

for current in result:
        print current
        print result
        for i in range(7, current, 2):
            if current%i==0:
                print i
                result.pop(b)
                #break
        b+=1
        print result

#Ausgabe:
#[7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 77, 79, 83, 89, 91, 97]
#[7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 77, 79, 83, 89, 91, 97]
#77
#[7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 77, 79, 83, 89, 91, 97]
#7
#11
#[7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 83, 89, 91, 97]
#89



Dann siehst du daß für current gleich 77 pop() 2mal aufgerufen wird. Hab keinen schimmer worum es einklich geht, aber das scheint mir nicht gewollt zu sein. Mit dem break nach dem pop sieht es imo besser aus.
joe


Ich weiß zwar nicht warum, aber es geht :) Danke!
Benutzeravatar
fs111
User
Beiträge: 170
Registriert: Samstag 15. November 2003, 11:42
Kontaktdaten:

Beitragvon fs111 » Montag 14. März 2005, 20:45

Wenn Du pop auf einer Liste ausführst, über die du gerade iterierst, sägst Du quasi an dem Ast auf dem Du sitzt. Das sollte man nicht machen.

fs111
Pydoc-Integration in vim - Feedback willkommen: http://www.vim.org/scripts/script.php?script_id=910

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder