On Sun, 26 Apr 2009 08:52:30 +0300, Ciprian Dorin, Craciun wrote: > I liked very much your implementation for the compare function, it > is very short and at the same time readable: > >> def compare(a, b, comp=operator.eq): >> return (len(a) == len(b)) and all(comp(*t) for t in zip(a, b)) > > But I have only one problem, it is suboptimal, in the sense that: * > it constructs two intermediary lists (the list comprehension and > the zip call);
If you look closely, there is no list comprehension. The argument to all() is a generator expression, which does not construct an intermediary list. However, you are right that zip produces a list, at least in Python 2.x. In Python 3 it produces a generator-like object. > * it evaluates all the elements, even if one is false at the > beginning; No, all() uses short-cut evaluation. It will return as soon as it hits a False element. > So, could you overcome these problems? In Python 2.4 or better, I can remove the intermediate list produced by zip with one line: from itertools import izip as zip (This may even work in 2.3, but I don't have 2.3 to test it.) -- Steven -- http://mail.python.org/mailman/listinfo/python-list