Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What is the point of the slice.indices method?

What is the point of the slice.indices method, since we have the following equality?

s = slice(start, stop, step)
assert range(*s.indices(length)) == range(length)[s]
like image 242
Maggyero Avatar asked Oct 20 '25 04:10

Maggyero


1 Answers

Since Python 3.2 added slicing support to range, the slice.indices method is unnecessary because s.indices(length) is equal to (range(length)[s].start, range(length)[s].stop, range(length)[s].step):

range objects now support index and count methods. This is part of an effort to make more objects fully implement the collections.Sequence abstract base class. As a result, the language will have a more uniform API. In addition, range objects now support slicing and negative indices, even with values larger than sys.maxsize. This makes range more interoperable with lists:

>>> range(0, 100, 2).count(10)
1
>>> range(0, 100, 2).index(10)
5
>>> range(0, 100, 2)[5]
10
>>> range(0, 100, 2)[0:5]
range(0, 10, 2)

(Contributed by Daniel Stutzbach in bpo-9213, by Alexander Belopolsky in bpo-2690, and by Nick Coghlan in bpo-10889.)

The slice.indices method is only kept for backwards compatibility.

The credit goes to Karl Knechtel.

like image 165
Maggyero Avatar answered Oct 21 '25 16:10

Maggyero



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!