[Python-3000] Drop list.reverse()?
Nicko van Someren
nicko at nicko.org
Fri Feb 15 23:53:18 CET 2008
On 15 Feb 2008, at 17:37, Guido van Rossum wrote:
> On Thu, Feb 14, 2008 at 4:52 PM, Raymond Hettinger <python at rcn.com>
> wrote:
>> Would it be worthwhile to leave reversed(s) and s[::-1] as the two
>> obvious ways to do it (ways that work with any Sequence, not just
>> lists)?
>
> I think we should keep it. There's no faster way to reverse a list
> in place.
Out of curiosity, I checked just how much faster it really is. The
answer is that for in place reversal it's more than an order of
magnitude faster than using either of the suggested alternatives:
>>> timeit.Timer('s.reverse()', setup='s=range(1000)').timeit()
0.80964398384094238
>>> timeit.Timer('s[:] = s[::-1]', setup='s=range(1000)').timeit()
9.2884359359741211
>>> timeit.Timer('s[:] = reversed(s)',
setup='s=range(1000)').timeit()
16.757926940917969
Not surprising, given that no objects were created or harmed in the
reversal of this list...
Interestingly, it's not the fastest way to make a reverse copy:
>>> timeit.Timer('s2 = list(s); s2.reverse()',
setup='s=range(1000)').timeit()
6.4023230075836182
>>> timeit.Timer('s2 = s[::-1]', setup='s=range(1000)').timeit()
5.3177969455718994
>>> timeit.Timer('s2 = list(reversed(s))',
setup='s=range(1000)').timeit()
12.906921148300171
(Times take on an Intel Mac, Python 2.5.1)
Nicko
More information about the Python-3000
mailing list