Improve performance of list_ formatter functions. Make list_re not add a value more than once.

This commit is contained in:
Charles Haley 2011-10-15 18:36:22 +02:00
parent f0987fe0a6
commit e078a7ca80

View File

@ -909,12 +909,10 @@ class BuiltinListUnion(BuiltinFormatterFunction):
l2 = [l.strip() for l in list2.split(separator) if l.strip()]
lcl1 = set([icu_lower(l) for l in l1])
res = []
for i in l1:
res.append(i)
res = set(l1)
for i in l2:
if icu_lower(i) not in lcl1:
res.append(i)
res.add(i)
if separator == ',':
return ', '.join(res)
return separator.join(res)
@ -930,7 +928,7 @@ class BuiltinListDifference(BuiltinFormatterFunction):
def evaluate(self, formatter, kwargs, mi, locals, list1, list2, separator):
l1 = [l.strip() for l in list1.split(separator) if l.strip()]
l2 = [icu_lower(l.strip()) for l in list2.split(separator) if l.strip()]
l2 = set([icu_lower(l.strip()) for l in list2.split(separator) if l.strip()])
res = []
for i in l1:
@ -951,12 +949,12 @@ class BuiltinListIntersection(BuiltinFormatterFunction):
def evaluate(self, formatter, kwargs, mi, locals, list1, list2, separator):
l1 = [l.strip() for l in list1.split(separator) if l.strip()]
l2 = [icu_lower(l.strip()) for l in list2.split(separator) if l.strip()]
l2 = set([icu_lower(l.strip()) for l in list2.split(separator) if l.strip()])
res = []
res = set()
for i in l1:
if icu_lower(i) in l2:
res.append(i)
res.add(i)
if separator == ',':
return ', '.join(res)
return separator.join(res)
@ -1007,12 +1005,12 @@ class BuiltinListRe(BuiltinFormatterFunction):
def evaluate(self, formatter, kwargs, mi, locals, src_list, separator, search_re, opt_replace):
l = [l.strip() for l in src_list.split(separator) if l.strip()]
res = []
res = set()
for item in l:
if re.search(search_re, item, flags=re.I) is not None:
if opt_replace:
item = re.sub(search_re, opt_replace, item)
res.append(item)
res.add(item)
if separator == ',':
return ', '.join(res)
return separator.join(res)