I am creating a number of slices [-WINDOW-i:-i]
of a list, where i
ranges between 32
and 0
:
vals = []
for i in range(32, -1, -1):
vals.append(other_list[-WINDOW-i:-i])
When i == 0
, this returns a slice of length 0:
other_list[-WINDOW-0:0]
I don't want to have to do this to solve it:
vals = []
for i in range(32, -1, -1):
if i == 0:
vals.append(other_list[-WINDOW:])
else:
vals.append(other_list[-WINDOW-i:-i])
… because if I have many lists to append to vals
, it gets messy.
Is there a clean way to do this?
Python is a zero-indexed language (things start counting from zero), and is also left inclusive, right exclusive you are when specifying a range of values. This applies to objects like lists and Series , where the first element has a position (index) of 0.
Specify Step of the Slicing You can specify the step of the slicing using step parameter. The step parameter is optional and by default 1.
Python slice() FunctionThe slice() function returns a slice object. A slice object is used to specify how to slice a sequence. You can specify where to start the slicing, and where to end. You can also specify the step, which allows you to e.g. slice only every other item.
One workaround for this quirk in Python slicing is to take advantage of these facts:
false_ish_value or other_value
always evaluates to other_value
0
is the only integer that is false-ish in a boolean contexts[n:None]
is equivalent to s[n:]
With those in mind, you can write your slice as:
other_list[-WINDOW-i:(-i or None)]
… and the slice will be interpreted as [-WINDOW-i:None]
(which is the same as [-WINDOW-i:]
) only when i
(and therefore -i
) is 0
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With