Negative subscripts

Rob Cliffe rob.cliffe at btinternet.com
Fri Nov 26 06:09:03 EST 2021


You could evaluate y separately:

yval = <long expression>
for item in x[:-yval] if yval else x:
     [do stuff]

or you could do it using the walrus operator:

for item in x[:-yval] if (yval := <long expression>) else x:
     [do stuff]

or, perhaps simplest, you could do

for item in x[:-y or None]: # a value of None for a slice argument means 
"don't slice here"
     [do stuff]

Best wishes
Rob Cliffe

On 26/11/2021 09:17, Frank Millman wrote:
> Hi all
>
> In my program I have a for-loop like this -
>
> >>> for item in x[:-y]:
> ...    [do stuff]
>
> 'y' may or may not be 0. If it is 0 I want to process the entire list 
> 'x', but of course -0 equals 0, so it returns an empty list.
>
> In theory I can say
>
> >>> for item in x[:-y] if y else x:
> ...    [do stuff]
>
> But in my actual program, both x and y are fairly long expressions, so 
> the result is pretty ugly.
>
> Are there any other techniques anyone can suggest, or is the only 
> alternative to use if...then...else to cater for y = 0?
>
> Thanks
>
> Frank Millman



More information about the Python-list mailing list