Skip to content

gh-145300: Add __length_hint__ for itertools.islice#145333

Draft
KowalskiThomas wants to merge 1 commit intopython:mainfrom
KowalskiThomas:kowalski/gh-145300-add-__length_hint__-for-itertools-islice
Draft

gh-145300: Add __length_hint__ for itertools.islice#145333
KowalskiThomas wants to merge 1 commit intopython:mainfrom
KowalskiThomas:kowalski/gh-145300-add-__length_hint__-for-itertools-islice

Conversation

@KowalskiThomas
Copy link

@KowalskiThomas KowalskiThomas commented Feb 27, 2026

Summary

This PR addresses an issue I spotted on #145300, which mentioned that itertools.islice does not support __length_hint__ currently.

General philosophy is

  • Early return 0 in all cases that make sense
  • If stop is not set, we don't know the number of elements we will iterate over, so we use the underlying iterator's __length_hint__ then do our calculations over that
  • Once we have a start, a stop and a step, or a start a length hint and a step, we can know how many iterations that will result in.

Testing wise, I added a few unit tests but it's unclear to me if I should be adding more (there doesn't seem to be a ton of instances/examples for the other itertools tests), but feel free to request more. Just to gain confidence in the change myself, I also tried the following locally (it works):

import itertools

for start in range(0, 100):
    for stop in range(0, 100):
        for step in range(1, 100):
            r = range(100)
            s = itertools.islice(r, start, stop, step)
            hint = s.__length_hint__()
            l = list(s)

            assert len(l) == hint

Note this is my first PR here; I read the contributor guidelines but I apologise in advance if anything I did not follow them (please do tell me!)

@python-cla-bot
Copy link

python-cla-bot bot commented Feb 27, 2026

All commit authors signed the Contributor License Agreement.

CLA signed

@bedevere-app
Copy link

bedevere-app bot commented Feb 27, 2026

Most changes to Python require a NEWS entry. Add one using the blurb_it web app or the blurb command-line tool.

If this change has little impact on Python users, wait for a maintainer to apply the skip news label instead.

@KowalskiThomas KowalskiThomas force-pushed the kowalski/gh-145300-add-__length_hint__-for-itertools-islice branch from 59ebd06 to 5f94bd0 Compare February 28, 2026 08:24
@KowalskiThomas KowalskiThomas force-pushed the kowalski/gh-145300-add-__length_hint__-for-itertools-islice branch from 5f94bd0 to 82c68c8 Compare February 28, 2026 08:32
@KowalskiThomas KowalskiThomas changed the title gh-145300: Add __length_hint__ for itertools.islice gh-145300: Add __length_hint__ for itertools.islice Feb 28, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant