[EMAIL PROTECTED] wrote: > manstey: > > is there a faster way of implementing this? Also, does the if clause > > increase the speed? > > I doubt the if increases the speed. The following is a bit improved > version: > > # Original data: > data = 'asdfbasdf' > find = (('a', 'f'), ('s', 'g'), ('x', 'y')) > > # The code: > data2 = data > for pat,rep in find: > data2 = data.replace(pat, rep) > print data2
Small bug in that code, you'll wind up with data2 only being the result of replacing the last (pat, rep) in find. It should be: data2 = data for pat, rep in find: data2 = data2.replace(pat, rep) Be careful with multi-char terms in find. You could wind up replacing patterns that only occur in data2 as a result of earlier replacements. I.e. if find = ('bc', 'ab'), ('aa', 'bb') data = 'abc' then data2 = 'aab' # First iteration, data2 = 'bbb' # Second iteration replaces 'aa' even though 'aa' isn't in original data. Have fun, ~Simon > > # If find contains only chars, and the string is long > # enough, then this is more or less the faster solution: > > from string import maketrans > table = map(chr, xrange(256)) > for c1,c2 in find: > table[ord(c1)] = c2 > table_str = "".join(table) > print data.translate(table_str) > > Bye, > bearophile -- http://mail.python.org/mailman/listinfo/python-list