Convert to binary and convert back to strings
Paul Rubin
http
Thu Feb 22 22:40:24 EST 2007
Steven D'Aprano <steve at REMOVEME.cybersource.com.au> writes:
> For a short string like "Python", using an array is a tiny bit slower, at
> the cost of more complex code.... if you're converting a long string,
> using array is faster. If it is a short string, it doesn't make much
> difference.
I modified your array version slightly:
def flip3(text):
n = len(text)
mask = ord('U')
text = array('b', text)
for i in xrange(n):
text[i] ^= mask
return text.tostring()
and I got flip3("Python") a little faster than the listcomp version,
but yeah, I was concerned mostly about long strings.
For fixed-sized short strings, using array('l') and unrolling the loop
makes a big difference:
text = "Pythonic"
mask = array('l','UUUU')[0]
def flip4(text):
text = array('l', text)
text[0] ^= mask
text[1] ^= mask
return text.tostring()
>>> timeit.Timer('flip1(text)', setup).repeat() # your version
[35.932021141052246, 36.262560844421387, 40.019834041595459]
>>> timeit.Timer('flip3(text)', setup).repeat() # flip3 above
[33.44039511680603, 31.375681161880493, 31.374078035354614]
>>> timeit.Timer('flip4(text)', setup).repeat() # flip4 above
[15.349261045455933, 15.526498794555664, 15.351589202880859]
See http://www.nightsong.com/phr/crypto/p3.py for an encryption
routine written this way.
More information about the Python-list
mailing list