On Thu, 22 Feb 2007 14:29:13 -0800, Paul Rubin wrote: > Steven D'Aprano <[EMAIL PROTECTED]> writes: >> Arrays don't support XOR any more than strings do. What's the advantage to >> using the array module if you still have to jump through hoops to get it >> to work? > > It's a lot faster. Sometimes that matters.
But is it? >>> import array >>> import timeit >>> >>> def flip1(text): ... mask = ord('U') ... return ''.join([chr(ord(c) ^ mask) for c in text]) ... >>> def flip2(text): ... mask = ord('U') ... text = array.array('b', [b ^ mask for b in array.array('b',text)]) ... return text.tostring() ... >>> text = "Python" >>> setup = 'from __main__ import flip1, flip2, text' >>> >>> timeit.Timer('flip1(text)', setup).repeat() [25.757978916168213, 23.174431085586548, 23.188597917556763] >>> timeit.Timer('flip2(text)', setup).repeat() [25.736327886581421, 25.76999306678772, 26.135013818740845] For a short string like "Python", using an array is a tiny bit slower, at the cost of more complex code. What about for a long string? >>> text = 'Python'*1000 >>> >>> timeit.Timer('flip1(text)', setup).repeat(3, 2000) [24.483185052871704, 26.007826089859009, 24.498424053192139] >>> timeit.Timer('flip2(text)', setup).repeat(3, 2000) [12.18204402923584, 12.342558860778809, 12.16040301322937] Well, that answers that question -- if you're converting a long string, using array is faster. If it is a short string, it doesn't make much difference. -- Steven D'Aprano -- http://mail.python.org/mailman/listinfo/python-list