Python range 數據類型 [學習 Python 必備基礎知識][看此一篇就夠了][range()][range 元素元素檢測、元素索引查找、切片、負索引][檢測 range 對象是否相等]

您的“關注”和“點贊”,是信任,是認可,是支持,是動力…

如意見相佐,可留言。
本人必將竭盡全力試圖做到準確和全面,終其一生進行修改補充更新。

在這裏插入圖片描述

1 range 類型概述

range 類型表示不可變的數字序列,通常用於在 for 循環中循環指定的次數。

range 類型相比常規 list 或 tuple 的優勢在於一個 range 對象總是佔用固定數量的(較小)內存,不論其所表示的範圍有多大(因爲它只保存了 start, stop 和 step 值,並會根據需要計算具體單項或子範圍的值)。

2 range() 函數

使用格式如下所示:

class range(stop)
class range(start, stop[, step])

對以上格式說明,

  • range 構造器的參數必須爲整數(可以是內置的 int 或任何實現了 index 特殊方法的對象)。

  • 如果省略 step 參數,其默認值爲 1。 如果省略 start 參數,其默認值爲 0,如果 step 爲零則會引發 ValueError

  • 如果 step 爲正值,確定 range r 內容的公式爲 r[i] = start + step*i 其中 i >= 0r[i] < stop。如果 step 爲負值,確定 range 內容的公式仍然爲 r[i] = start + step*i,但限制條件改爲 i >= 0 且 r[i] > stop。如果 r[0] 不符合值的限制條件,則該 range 對象爲空。 range 對象確實支持負索引,但是會將其解讀爲從正索引所確定的序列的末尾開始索引。

  • 元素絕對值大於 sys.maxsize 的 range 對象是被允許的,但某些特性 (例如 len()) 可能引發 OverflowError

  • stop 參數:不包括stop本身。

舉例如下所示:

>>> list(range(10))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> list(range(1, 11))
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> list(range(0, 30, 5))
[0, 5, 10, 15, 20, 25]
>>> list(range(0, 10, 3))
[0, 3, 6, 9]
>>> list(range(0, -10, -1))
[0, -1, -2, -3, -4, -5, -6, -7, -8, -9]
>>> list(range(0))
[]
>>> list(range(1, 0))
[]

3 range 元素檢測、元素索引查找、切片、負索引介紹

range 對象實現了 collections.abc.Sequence ABC,提供如包含檢測、元素索引查找、切片等特性,並支持負索引 ,舉例如下所示:

>>> r = range(0, 20, 2)
>>> r
range(0, 20, 2)
>>> 11 in r
False
>>> 10 in r
True
>>> r.index(10)
5
>>> r[5]
10
>>> r[:5]
range(0, 10, 2)
>>> r[-1]
18

4 使用 ==!= 檢測 range 對象是否相等

使用 ==!= 檢測 range 對象是否相等是將其作爲序列來比較。

也就是說,如果兩個 range 對象表示相同的值序列就認爲它們是相等的。

請注意:比較結果相等的兩個 range 對象可能會具有不同的 start, stop 和 step 屬性。舉例如下所示:

range(0) == range(2, 1, 3)
range(0, 3, 2) == range(0, 4, 2)

5 版本區別和版本新功能(部分)

  • 3.2 版更改: 實現 Sequence ABC。 支持切片和負數索引。 使用 int 對象在固定時間內進行成員檢測,而不是逐一迭代所有項。

  • 3.3 版更改: 定義 ==!= 以根據 range 對象所定義的值序列來進行比較(而不是根據對象的標識)。

  • 3.3 新版功能: start, stopstep 屬性。

【文章其它地址】

微信公衆號:碼農阿杰

博客園

【參考資料】

Python 官網

Python 3.8.2 documentation

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章