[Tutor] Questions about PIL
Kent Johnson
kent37 at tds.net
Thu Nov 9 11:58:06 CET 2006
Chris Hengge wrote:
> alist = difference(image1,image2)
> a = [b for b in alist.getdata() if b != (0,0,0)]
> if len(a) != 0:
> print "Not the same"
>
> is much slower then (9x)
>
> if im1.tostring() != im2.tostring()
> print "something changed!"
One reason the second version will be faster is that it can stop
checking for differences as soon as it finds one. The first version will
look at all of alist.getdata() even if the first entry is not (0, 0, 0).
If you are using Python 2.5 try
if any(b != (0, 0, 0) for b in alist.getdata()):
print "Not the same"
This uses a generator comprehension instead of a list comprehension so
it doesn't have to make the whole list, only enough to find a
non-(0,0,0) value.
In Python 2.4 you can write it as
for b in alist.getdata():
if b != (0, 0, 0):
print "Not the same"
break
Again the key idea is not to create the entire comparison list if it is
not needed, and to abort the loop when you find a non-zero entry.
Kent
More information about the Tutor
mailing list