python序列類型:str、bytes、 bytearray、 list、 tuple、 range


python中,序列類型有str、bytes、 bytearray、 list、 tuple、 range。所謂序列,說明是有序的,可以通過索引做一些特定的操作。首先先了解序列對象中比較重要的兩個:str 和 list,然后探討下序列對象的共有操作。

字符串:str

Python中的文本數據由str對象或字符串處理。 字符串是Unicode編碼(從python3開始)的不可變序列。可以通過把字符序列通過單引號、雙引號、三引號來創建字符串。例如:

# Python 3.5.3 >>> test = "Hello\tworld!"
>>> print(test)
Hello    world!
>>> test
'Hello\tworld!'
#字符串中可以包含任何unicode編碼中包含的字符。'\t'是轉義字符,在打印輸出中顯示為多個空格(具體幾個由操作環境決定)
# 在交互模式下直接輸變量名,顯示更能體現字符串在python中的存儲方式
>>> d = r'c:\windows\sys\table' >>> d 'c:\\windows\\sys\\table'
# 'r'前綴,'raw'的縮寫,會使大部分的轉義失效
>>> sql = """select * from user where name='tom' """ >>> sql "select * from user where name='tom' "
# 可以在三引號中方便的使用單雙引號
# 使用三引號可以方便的橫跨多行,任何空白字符都會被包含到字符串中。

字符串是可迭代的。

列表:list

列表是可變的序列,通常用於存儲同類數據的集合,不過一個列表中可以存儲任意不同類型的數據。

列表可以通過不同的方式創建:

  • 使用一對方括號來表示空列表:[]
  • 使用一對方括號,括號中的元素用逗號隔開: [a, b, c]
  • 使用列表解析式:[x for in iterable]
  • 使用列表的類型構造函數:list() 或 list(iterable)

構造函數創建一個列表,其元素和作為參數的可迭代對象完全相同,元素的順序也相同。可迭代對象可以是序列、支持迭代的容器或者一個可迭代對象。如果可迭代對象是一個列表,返回一個該列表的拷貝,功能類似於iterable[:]。如果沒有參數,構造函數創建一個新的空列表,[]。

>>> lst = [1,2,3]
>>> cp = list(lst)
>>> cp
[1, 2, 3]
>>> lst is cp
False

 

 

以下內容翻譯自 file:///Library/Frameworks/Python.framework/Versions/3.5/Resources/English.lproj/Documentation/library/stdtypes.html#sequence-types-list-tuple-range

公共的序列操作

下面表中列出的操作適用於所有的序列類型,不論是可變序列還是不可變序列。

表中的操作是按優先級升序排列的。在表中,s和t是同一種序列類型,n,j,i,k表示整數,x是一個滿足s所施加的任何類型和值限制任意對象。作為比較操作,in 和 not in 具有相同的優先級。

 

Operation Result Notes
in s True如果序列s中的某個元素等於x, 否則False (1)
not in s False 如果序列s中的某個元素等於x, 否則True (1)
t s 和 t 串聯,返回一個新的序列
(6)(7)
n or s 相當於將s自身相加n次 (2)(7)
s[i] 序列s的第i個元素,索引從0開始 (3)
s[i:j] s的第i到j個元素,包含第i個元素,不包含第j個元素 (3)(4)
s[i:j:k] 分片操作,每隔k個元素取s的第i到j個元素的一個元素 (3)(5)
len(s) s序列的長度  
min(s) 序列s中最小的元素  
max(s) 序列s中最大的元素  
s.index(x[, i[, j]]) 在s中出現的第一個x元素的索引  (i及i索引之后,j索引之前) (8)
s.count(x) x在s中出現的總次數  

 

相同的列表類型支持比較。實際上,元組和列表通過比較對應索引位置的元素進行。也就是說,如果兩個列表或者元組對象相等,那么它們的長度需要相同並且每一個元素必須相等。

注釋:

  1. in 和 not in操作一般只用於普通的包含測試, 一些特殊的序列,例如str、bytes、bytearray也將它們用於子序列測試:

    >>> "gg" in "eggs"
    True
  2. 小於0的值當作0對待 (產生一個和s序列類型相同的空序列)。需要注意的是序列s中的元素沒有被拷貝,它們只是被引用多次。 

    >>> lists = [[]] * 3
    >>> lists
    [[], [], []]
    >>> lists[0].append(3)
    >>> lists
    [[3], [3], [3]]

     [[]]是一個包含了一個空列表的元素的列表,所以通過 [[]] 3 產生的三個元素都引用同一個空列表。所以修改列表中的任意一個元素其實修改的是同一個列表。可以通過下面的方式創建一個包含不同列表元素的列表:

    >>> lists = [[] for i in range(3)]
    >>> lists[0].append(3)
    >>> lists[1].append(5)
    >>> lists[2].append(7)
    >>> lists
    [[3], [5], [7]]
  3. 如果i或j是負的,那么索引是相對於列表s末尾的,被替換為:len(s) i 或 len(s) j。但是-0還是0.
  4. 從i到j的分片操作定義一個新的帶有索引k的項的序列,<= j。如果i或者j大於len(s), 使用 len(s)。如果i被省略,使用0。如果j被省略,使用len(s)。如果i大於等於j,那么返回的片段是空的。

(未完待續)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM