python內建型別

2021-10-17 04:05:59 字數 3247 閱讀 8889

python直譯器中主要內建型別有數字、序列、對映、類、例項和異常。

有三種基本序列型別:list,tuple和range

通用序列操作

大多數序列型別,包括可變型別和不可變型別都支援下表中的操作。此表按優先順序公升序列出了序列操作,在**中,s和t是具有相同型別的序列。n、i、j和k是整數而x是任何滿足s所規定的型別和值限制的任意物件。

注意,innot in操作具有與比較操作相同的優先順序,+(拼接)和*(重複)操作具有與對應數值運算相同的優先順序

運算結果

注釋x in s

如果s中某項等於x則結果為true,否則為false

1x not in s

如果s中某項等於x則結果為false,否則為true

1s+t

s與t相拼接

6 7s*n或n*s

相當於s與自身進行n次拼接

2 7s[i]

s的第i項,起始為0

3s[i:j]

s從i到j的切片

3 4s[i:j:k]

s從i到j步長為k的切片

3 5len(s)

s的長度

min(s)

s的最小項

max(s)

s的最大項

s.index(x,[,i[,j]])

x在i中首次出現項的索引號(索引號在i或其後且在j之前)

8s.count(x)

x在s**現的總次數

注釋:雖然innot in操作在通常情況下僅被用於簡單的成員檢測,某些專門化序列(例如str,bytes,和bytearray)也使用它們進行子串行檢測

小於0的n值會被當作0來處理(生成乙個與s同型別的空序列)。注意序列s中的項不會被拷貝,而是會被多此引用。例如:

原因就是是乙個包含了乙個空列表的單元素列表,所以*3結果中的三個元素都是對這乙個空列表的引用。修改lists中的任何乙個元素實際上都是對這乙個空列表的修改。我們可以用如下的方式建立以不同列表為元素的列表:

如果i或j為負值,則索引順序是相對於序列s的末尾,索引號會被替換為len(s)+ilen(s)+j。但要注意-0依然為0

s從i到j的切片被定義為所有滿足i<=k

s從i到j步長為k的切片被定義為所有滿足i <= k < j的索引號k的項組成的序列。如果i或j大於len(s),則使用len(s)。如果i被省略或為none,則使用0。如果j被省略或為none,則使用len(s)。如果i大於等於j,則切片為空。

拼接不可變序列總是會產生新的物件。這意味著通過重複拼接來構建序列的執行時開銷將會基於序列總長度的乘方。想要獲得線性的執行時開銷,我們必須改用下列替代方案之一:

a. 如果拼接 str 物件,你可以構建乙個列表並在最後使用 str.join() 或是寫入乙個 io.stringio 例項並在結束時獲取它的值

b. 如果拼接 bytes 物件,你可以類似地使用 bytes.join() 或 io.bytesio,或者你也可以使用 bytearray 物件進行原地拼接。 bytearray 物件是可變的,並且具有高效的重分配機制

c. 如果拼接 tuple 物件,請改為擴充套件 list 類

d. 對於其它型別,請檢視相應的文件

某些序列型別(例如range)僅支援遵循特定模式的項序列,因此並不支援序列拼接或重複

當 x 在 s 中找不到時 index 會引發 valueerror。 不是所有實現都支援傳入額外引數 i 和 j。 這兩個引數允許高效地搜尋序列的子串行。 傳入這兩個額外引數大致相當於使用 s[i:j].index(x),但是不會複製任何資料,並且返回的索引是相對於序列的開頭而非切片的開頭。

不可變序列型別

不可變序列型別通常實現了對hash()內建函式的支援,而可變序列型別通常沒有實現。這種支援允許不可變型別,例如tuple例項被用作dict鍵,以及儲存在set和frozenset例項中。

嘗試對包含有不可雜湊值的不可變序列進行雜湊運算將會導致typeerror。

可變序列型別

/待補充

列表是可變序列,通常用於存放同類專案的集合。

class list([iterable])

可以使用多種方式構建列表:

構造器將構造乙個列表,其中的項與iterable中的項具有相同的值和順序。iterable可以是序列、支援迭代的容器或其他可迭代物件。如果iterable已經是乙個列表,將建立並返回其副本,類似於iterable[:]。例如,list('abc')返回['a','b','c']list(1,2,3)返回[1,2,3]。如果沒有給出引數,構造器將建立乙個空列表

在python中處理文字資料是使用str物件,也稱為字串。字串是由unicode碼位構成的不可變序列。字串字面值有多種不同的寫法:

使用三重引號的字串可以跨越多行-其中所有的空白字元都將包含在該字元字面值中。

作為單一表示式組成部分,由空格分隔的多個字串字面值會被隱式地轉換為單個字串字面值。也就是說,("spam " "eggs") == "spam eggs"

字串的方法

**str.format(*args,kwargs)

執行字串格式化操作。呼叫此方法的字串可以包含字串字面值或者以花括號{}括起來的替換域。每個替換域可以包含乙個位置引數的數字索引,或者乙個關鍵字引數的名稱。返回的字串副本中每個替換域都會被替換為對應引數的字串值。

python內建型別 python列表內建型別方法

列表操作方法 對列表l操作 例如list range 1,5 即 list 1,2,3,4 不含最後乙個元素 list range 1,10,2 即 list 1,3,5,7,9 在列表末尾新增新的物件 2 list.count obj 統計某個元素在列表 現的次數 3 list.extend se...

python內建型別

元組 不可變,所以是可雜湊的 列表 實質上可被認為是長度可變的陣列 cpython 是由對其他物件的引用組成的連續陣列。指向這個陣列的指標及長度被儲存在列表的頭結構中。但是,python在建立列表的時候會採用指數過分配,使得新增或取出元素的平坦複雜度小。列表推導式 解析器在對列表推導求值的時候並不知...

python內建物件型別

python內建物件型別 有 數字,字串,列表,元組,字典,集合等 pickle醃製 為了達到對一些物件進行持久化的儲存,並且不丟這個物件的型別與資料,我需要對這個物件進行序列號,然後存在記憶體或者存在第三方檔案,然後序列號的過程就叫醃製 例項 import pickle 匯入模組 lista na...