BigOmega BigOmega - 1 year ago 165
Python Question

Why does range(start, end) not include end?

>>> range(1,11)


gives you

[1,2,3,4,5,6,7,8,9,10]


Why not 1-11?

Did they just decide to do it like that at random or does it have some value I am not seeing?

Answer Source

Because it's more common to call range(0, 10) which returns [0,1,2,3,4,5,6,7,8,9] which contains 10 elements which equals len(range(0, 10)). Remember that programmers prefer 0-based indexing.

Also, consider the following common code snippet:

for i in range(len(li)):
  pass

Could you see that if range() went up to exactly len(li) that this would be problematic? The programmer would need to explicitly subtract 1. This also follows the common trend of programmers preferring for(int i = 0; i < 10; i++) over for(int i = 0; i <= 9; i++).

If you are calling range with a start of 1 frequently, you might want to define your own function:

>>> range1 = lambda start, end: range(start, end+1)
>>> range1(1, 10)
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download