Skip to content

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

Open
KowalskiThomas wants to merge 4 commits intopython:mainfrom
KowalskiThomas:kowalski/gh-145300-add-__length_hint__-for-itertools-islice
Open

gh-145300: Add __length_hint__ for itertools.islice#145333
KowalskiThomas wants to merge 4 commits 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
@KowalskiThomas KowalskiThomas marked this pull request as ready for review February 28, 2026 09:33
Copy link

@chatgpt-codex-connector chatgpt-codex-connector bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 82c68c8fe5

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@KowalskiThomas
Copy link
Author

So it seems the Codex bot which we use at work is configured to review my PRs on all repositories, including the ones that do not belong to my organisation... I've disabled it for the time being as I don't know what the policy around it is in CPython (sorry about that).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant