zfoxránézésre persze, de ezzel csak a forráskódot optimizáltad, az algoritmus működését nem. Én is így indultam egyébként, és csináltam nagyobb képeket is bonyolultabb alakzatokkal. A futási idő és memórihasználat nagy volt.
Az én megoldásommal az egymásba ágyazott if-ek előnye, hogy maguk a végrehjató részek tényleg csak akkor futnak le, ha a feltételek teljesülnek, illetve a belső if-ek vizsgálatára csak akkor kerül sor, ha a külső feltételek igazak.
A te megoldásodnál több művelet fut le, ezért több elem kerül a bufferbe, olyanok is, amik egyébként feleslegesen kerülnek bele, mert az előző képpontvizsgálat következtében kitöltésre kerülnek, illetve több feltétel értékelődik ki.
def fill(self,x,y):
startcolor=self.kep.getpixel((x,y))
fillcolor=(255,0,0)
fillbuffer=[]
maxlen=0
fillbuffer.append((x,y))
while len(fillbuffer):
currentpixel=fillbuffer.pop()
for i,j in [(0,1),(0,-1),(1,0),(-1,0)]:
nezpixel=currentpixel[0]+i,currentpixel[1]+j
if self.kep.getpixel(nezpixel)==startcolor and nezpixel[0]>1 and nezpixel[0]1 and nezpixel[1]
nézd meg a buffer méretet ide-oda kattintgatva, majd nézd meg ugyanezt az enyémmel. Két nagyságrenddel kisebb a bufferméret. Ez akkor lényeges, ha nagy és bonyolult az ábra, és nincs túl sok memória a gépben, nem beszélve a futási időről.