這些內置的Python數據類型有什麼區別:list,sequence and slice?正如我所看到的,所有三個實質上代表了C++和Java稱爲數組。在Python中的列表,序列和切片之間的區別?
回答
list
不僅僅是普通數組。您可以初始化它們而無需提供項目數量。你可以給他們append
/push
,你可以從他們的remove
/pop
/del
項目,你可以有不同類型的對象列表(例如,[1,'e', [3]]
),你可以有遞歸列表...你可以切片列表,這意味着只有少數項目獲得新的列表。slice
是一個對象類型,用於「幕後」處理a[start:stop:step]
表單中的擴展切片,如help(slice)
所示。
「序列」不是一個對象,更像是一個非正式的接口,一些對象如list
實現。
Python開發人員認爲否則:['list':一個內置的Python序列。儘管它的名字更接近於其他語言的數組,而不是鏈接列表,因爲對元素的訪問是'O(1)'。](http://docs.python.org/py3k/glossary.html#term-列表) – SilentGhost 2010-05-27 11:40:13
也許更好的C++類比是std :: vector,除了異構。 – 2010-05-27 11:42:56
列表是一個序列類型,類似於陣列
序列類型描述的功能性超集:
有六種序列類型:字符串, Unicode字符串,列表,元組,緩衝區和xrange對象。
- 片是子陣列的符號(或子也)
嚴格地說,切片是這樣一種類型,代表一系列指數,例如一個開始,一個停止和一個步驟。切片根本不是容器類型。您可以使用切片對列表編制索引,從而生成新列表,該列表是原始列表的子列表的副本。
列表與C++數組的不同之處在於它們是異構的;這些元素不需要具有相同的類型。正如MYYN已經指出的,「序列」根本不是Python類型,而是對各種內置類型的描述。
列表是一個序列,但一個序列不一定是一個列表。序列是支持序列接口(「協議」)的任何類型。這是通過鴨式打印而不是通過嚴格的繼承層次來完成的。請注意,序列是容器,但容器不一定是序列。 (序列很好,順序!)
參見http://docs.python.org/library/stdtypes.html#sequence-types-str-unicode-list-tuple-buffer-xrange
切片對象通常創建經由語法糖(foo[2:5]
)和隱式地提供給容器類型特殊的方法(如__getitem__
),它可以重寫。除非創建自己的序列/容器,否則通常不需要處理切片。
參見http://docs.python.org/reference/datamodel.html#specialnames
解釋比得上陣列。我不確定,但我認爲它是用cPython作爲動態擴展數組來實現的。但是,該接口使它更像C++ STL向量,而不僅僅是一個普通的舊數組。
你在你的問題很混合不同的東西,所以我就回答不同的問題;-P
你現在問在Python中最重要的接口之一:iterable
- 它基本上是什麼您可以使用像for elem in iterable
。
iterable
有三個後代:sequence
,generator
和mapping
。
甲序列是一個迭代用隨機訪問。您可以要求任何項目的順序,而不必消耗它之前的項目。有了這個屬性,你可以建立
slices
,它一次給你多個元素。一個切片可以給你一個子序列:seq[from:until]
和每第n個項目:seq[from:until:nth]
。list
,tuple
和str
都是序列。如果訪問是通過鍵而不是整數位置完成的,則您有一個映射。
dict
是基本的映射。最基本的迭代是生成器。它不支持隨機訪問,因此不支持切片。您必須按照給定的順序使用所有項目。生成器通常只在您迭代它們時才創建它們的項目。創建
generators
的常用方法是生成器表達式。除了圓括號外,它們看起來完全像列表理解,例如(f(x) for x in y)
。調用使用yield
關鍵字的函數也會返回一個生成器。
常見的適配器所有iterables是迭代。 iterators
與它們支持的最基本類型具有相同的接口,generator
。它們是通過在迭代器上調用iter
來顯式創建的,並且隱式地用於各種循環結構中。
我喜歡這個答案中提到的發電機。想想「懶」和「無限」。 – Donald 2018-02-10 10:43:55
- 1. 列表切片和直接分配列表之間的區別?
- 2. 列表和序列之間的區別
- 3. 複製列表時'[:]'和'[::]'切片之間的區別?
- 4. 列表正常循環和使用切片之間的區別?
- 5. Python中列表之間的區別
- 6. 在Python中列表和列表[:]之間有什麼區別?
- 7. NodeJS和Python散列之間的區別
- 8. parcelable和序列化之間的區別?
- 9. Python中的Bytearray和列表之間的區別
- 10. Python中的「切片列表」和「省略號」;切片列表和列表與列表切片
- 11. R中的散列和列表之間的區別
- 12. Clojure:列表和返回列表的函數之間的區別
- 13. java中cast陣列列表和cast數組之間的區別
- 14. 切片整個列表和直接分配的切片分配之間有什麼區別?
- 15. 數組列表和列表之間的區別
- 16. 列表<T>和列表<object>之間的區別?
- 17. MVC4中的XML和Json序列化程序之間的區別
- 18. Python:過濾器(函數,序列)和映射(函數,序列)之間的區別
- 19. 列表,排序列表和數組列表之間有什麼區別? (c#)
- 20. Python列表切片
- 21. 切片python列表
- 22. 在Python中的列表和字典之間進行切換?
- 23. 日期列表之間的區別
- 24. []和列表之間的區別不運行程序
- 25. ListView和列之間的區別?
- 26. 對象和散列之間的區別?
- 27. 加密和散列之間的區別
- 28. 陣列和指針之間的區別
- 29. Python的切片列表
- 30. Java:迭代器和陣列列表之間的區別
Python [docs have definitions](http://docs.python.org/glossary.html)。 – SilentGhost 2010-05-27 11:30:25