ValueError vs IndexError, unpacking arguments with string.split

Chris Angelico rosuav at gmail.com
Sun Dec 2 06:46:29 EST 2018


On Sun, Dec 2, 2018 at 10:36 PM Morten W. Petersen <morphex at gmail.com> wrote:
> While we're on the subject, I did a test in my Python interpreter:
>
> Python 3.6.7 (default, Oct 22 2018, 11:32:17)
> [GCC 8.2.0] on linux
> Type "help", "copyright", "credits" or "license" for more information.
> >>> range(0,3,100)
> range(0, 3, 100)
> >>> len(range(0,3,100))
> 1
> >>> range(0,100)
> range(0, 100)
> >>> len(range(0,100))
> 100
> >>>
>
> Where a range with a step, gives the length 1, while a plain range gives
> the right length.
>
> I think that's confusing and inconsistent, and it would be nice to have some
> "value to be calculated" for the length integer as well.
>

Possibly you're misinterpreting the arguments here.

>>> list(range(0, 3, 100))
[0]

class range(object)
 |  range(stop) -> range object
 |  range(start, stop[, step]) -> range object
 |

The *third* argument is the step, so if you were expecting "every
third number up to 100", you'd be looking for this:

>>> len(range(0, 100, 3))
34
>>> len(list(range(0, 100, 3)))
34

To my knowledge, len(x) == len(list(x)) for any core data type that
has a length.

ChrisA



More information about the Python-list mailing list