DEV Community

Super Kai (Kazuya Ito)
Super Kai (Kazuya Ito)

Posted on • Edited on

Range in Python (1)

Buy Me a Coffee

*Memo:

A range:

  • is the ordered immutable(hashable) collection of zero or more numbers whose type is range:
    • Ordered means that the order of the numbers in a range is kept so it guarantees that the order is always the same unless someone or something changes it.
    • Immutable(Hashable) means the numbers of a range cannot be changed.
  • can be used with len() to get the length.
  • is False if it's empty.
  • can be checked if a specific number is in the range with in keyword.
  • can be checked if the range is referred to by two variables with is keyword.
  • and one or more ranges cannot be concatenated with + and |.
  • cannot be enlarged with * and a number.
  • can be iterated with a for statement.
  • can be unpacked with an assignment and for statement, function and * but not with **.
  • can be created by range().
  • can be big because it's the special object which always uses small memory not to get MemoryError and it's not an iterator.
  • can be read by indexing and slicing.
  • cannot be changed by indexing, slicing and a del statement.
  • can be continuously used through multiple variables.
  • can be shallow-copied only by slicing but not by copy.copy().
  • cannot be deep-copied and even shallow-copied by copy.deepcopy().

Even a big range doesn't get MemoryError.


range() can create a range between [start, stop) as shown below:

*Memo:

  • The 1st argument is start or stop(Required-Type:int):
    • It's a start index(inclusive) or stop index(exclusive).
    • Don't use start= or stop=.
  • The 2nd argument is stop(Optional-Type:int):
    • It's a stop index(exclusive).
    • Don't use stop=.
  • The 3rd argument is step(Optional-Default:1-Type:int):
    • It's the interval of elements.
    • It cannot be 0.
    • Don't use step=.
  • Only if one argument is set, the 1st argument is stop, creating the range between [0, stop).
# Empty range
v = range(0)
v = range(0, 0)
v = range(0, 0, 1)
v = range(5, 5)
v = range(5, 5, 1)
v = range(-10)
v = range(10, -10)
v = range(-10, 10, -3)
v = range(10, -10, 3)
# No error

v = range(5)
v = range(0, 5)
v = range(0, 5, 1)
v = range(-10, 10, 3)
v = range(10, -10, -3)
# No error

v = range(100000000)
print(len(range(5)))
for x in range(5): pass
v1, v2, v3 = range(3)
v1, *v2, v3 = range(6)
for v1, v2, v3 in [range(3), range(3, 6)]: pass
for v1, *v2, v3 in [range(6), range(6, 12)]: pass
print(*range(4), *range(4, 6))
print([*range(4), *range(4, 6)])
# No error

v = range(0, 5, 0)
v = range(3) + range(2) + range(4)
v = range(3) | range(2) | range(4)
v = range(5) * 3
# Error
Enter fullscreen mode Exit fullscreen mode

A range is the ordered immutable(hashable) collection of zero or more numbers whose type is range as shown below:

*Memo:

  • A range can be unpacked with *.
  • A range can be read by indexing:
    • Indexing can be done with one or more [index] in the range [The 1st index, The last index]:
      • index(Required-Type:int):
        • Don't use index=.
      • Error occurs if index is out of range.
    • index can be signed indices(zero and positive and negative indices).
v = range(5)
v = range(0, 5)
v = range(0, 5, 1)

print(v)
# range(0, 5)

print(type(v))
# <class 'range'>

print(v.start, v.stop, v.step)
# 0 5 1

print(*v)
print(v[0], v[1], v[2], v[3], v[4])
print(v[-5], v[-4], v[-3], v[-2], v[-1])
# 0 1 2 3 4
Enter fullscreen mode Exit fullscreen mode
v = range(0, 5, 0)
# ValueError: range() arg 3 must not be zero
Enter fullscreen mode Exit fullscreen mode
# Empty range
v1 = range(0)
v2 = range(0, 0)
v3 = range(0, 0, 1)
v4 = range(5, 5)
v5 = range(5, 5, 1)

print(v1, v2, v3, v4, v5)
# range(0, 0) range(0, 0) range(0, 0) range(5, 5) range(5, 5)

print(v[0])
# IndexError: range object index out of range
Enter fullscreen mode Exit fullscreen mode
v = range(-10, 10, 3)

print(v)
# range(-10, 10, 3)

print(*v)
print(v[0], v[1], v[2], v[3], v[4], v[5], v[6])
print(v[-7], v[-6], v[-5], v[-4], v[-3], v[-2], v[-1])
# -10 -7 -4 -1 2 5 8
Enter fullscreen mode Exit fullscreen mode
v = range(10, -10, -3)

print(v)
# range(10, -10, -3)

print(*v)
print(v[0], v[1], v[2], v[3], v[4], v[5], v[6])
print(v[-7], v[-6], v[-5], v[-4], v[-3], v[-2], v[-1])
# 10 7 4 1 -2 -5 -8
Enter fullscreen mode Exit fullscreen mode
v1 = range(-10)
v2 = range(10, -10)
v3 = range(-10, 10, -3)
v4 = range(10, -10, 3)

print(v1, v2, v3, v4)
# range(0, -10) range(10, -10) range(-10, 10, -3) range(10, -10, 3)

print(v1[0])
print(v2[0])
print(v3[0])
print(v4[0])
# IndexError: range object index out of range
Enter fullscreen mode Exit fullscreen mode

A range can be used with len() to get the length as shown below:

v = range(5)

print(*v)
# 0 1 2 3 4

print(len(v))
# 5
Enter fullscreen mode Exit fullscreen mode

Top comments (0)