Slicing tuples backwards - how to deal with the first element?
Let's say I need elements 1-3 of a tuple, back:
x = (0,1,2,3,4)
x[1:4]
Returns (1,2,3)
and
x[3:0:-1]
Returns (3,2,1)
But what if I want items 0-2?
I can do x[2::-1]
to get the correct answer (2,1,0)
, but it x[2:0:-1]
returns (2,1)
and x[2:-1:-1]
returns ()
.
Is there a way to cut off the last element without using an operator if
if I cut it at unknown intervals?
source to share
Possibly merging a reverse-frequent tuple with your original tuple and an index that:
>>> x = (0, 1, 2, 3)
>>> y = (0,)
Then:
>>> (y + x)[3:0:-1]
(2, 1, 0)
>>> (y + x)[2:0:-1]
(1, 0)
Not as fast as Peter DeGlopper's solution:
#!/usr/bin/env python
import time
x = tuple(range(0,int(1e6)))
y = (0,)
start_time = time.time()
a = (y+x)[3:0:-1]
print("tuple add --- %s seconds ---" % (time.time() - start_time))
start_time = time.time()
b = x[0:3][::-1]
print("tuple rev --- %s seconds ---" % (time.time() - start_time))
Not even close, really:
$ ./test61.py
tuple add --- 0.0153260231018 seconds ---
tuple rev --- 6.19888305664e-06 seconds ---
source to share