En Wed, 11 Feb 2009 23:22:26 -0200, Basilisk96 <basilis...@gmail.com>
escribió:
def MakePairs(path):
import os
import operator
join = os.path.join
rawPairs = (
(join(path, s), func(s))
for s in os.listdir(path)
if func(s) is not None and func(s).endswith("some criterion")
)
#Use the second item in the pair as the sort criterion
result = sorted(rawPairs, key=operator.itemgetter(1))
return result
where "func" is a single-argument function that returns either a
string or None, but is an expensive call.
I am pretty sure that the sorted() construct cannot be improved much
further, but...
...does anyone have ideas on improving the "rawPairs" iterator so that
it calls "func(s)" only once per iteration? Perhaps a lambda
construct, but I am not sure how to go about it...?
Don't use a generator then. If you're going to finally return a list (and
sorted does exactly that), build a list right from the start:
def MakePairs(path):
join = os.path.join
result = []
append = result.append
for s in os.listdir(path):
key = func(s)
if key is not None and key.endswith("some criterion"):
append((join(path, s), key))
#Use the second item in the pair as the sort criterion
result.sort(key=operator.itemgetter(1))
return result
--
Gabriel Genellina
--
http://mail.python.org/mailman/listinfo/python-list