Array of Chars to String
Michael Spencer
mahs at telcopartners.com
Tue Apr 19 20:00:02 EDT 2005
Michael Spencer wrote:
> Bengt Richter wrote:
> > I think this will be worth it if your string to modify is _very_ long:
>
>>
>> >>> def some_func(s, letters, table=''.join([chr(i) for i in
>> xrange(256)])):
>> ... return s.translate(table,
>> ... ''.join([chr(i) for i in xrange(256) if chr(i) not in
>> letters]))
>> ...
>> >>> some_func("Bob Carol Ted Alice", 'adB')
>> 'Bad'
>>
> According to my measurements the string doesn't have to be long at all
> before your method is faster - cool use of str.translate:
>
...and here's a version that appears faster than "".join across all lengths of
strings:
>>> import string
>>> def some_func1(s, letters, table=string.maketrans("","")):
... return s.translate(table, table.translate(table, letters))
...
>>> some_func1("Bob Carol Ted Alice", "adB")
'Bad'
>>>
Timings follow:
>>> def some_func(s, letters, table=''.join([chr(i) for i in xrange(256)])):
... return s.translate(table,
... ''.join([chr(i) for i in xrange(256) if chr(i) not in letters]))
...
>>> def some_func1(s, letters, table=string.maketrans("","")):
... return s.translate(table, table.translate(table, letters))
...
>>> for multiplier in (1, 10, 100, 1000, 10000):
... print "List multiplier: %s" % multiplier
... print shell.timefunc(some_func, "Bob Carol Ted Alice" * multiplier, 'adB')
... print shell.timefunc(some_func1, "Bob Carol Ted Alice" * multiplier,
'adB')
...
List multiplier: 1
some_func(...) 1224 iterations, 408.57usec per call
some_func1(...) 61035 iterations, 8.19usec per call
List multiplier: 10
some_func(...) 1223 iterations, 408.95usec per call
some_func1(...) 54420 iterations, 9.19usec per call
List multiplier: 100
some_func(...) 1190 iterations, 420.48usec per call
some_func1(...) 23436 iterations, 21.34usec per call
List multiplier: 1000
some_func(...) 951 iterations, 0.53msec per call
some_func1(...) 3870 iterations, 129.21usec per call
List multiplier: 10000
some_func(...) 309 iterations, 1.62msec per call
some_func1(...) 417 iterations, 1.20msec per call
>>>
More information about the Python-list
mailing list