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 x 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 |
---|---|---|
x in s |
True如果序列s中的某個元素等於x , 否則False |
(1) |
x not in s |
False 如果序列s中的某個元素等於x, 否則True |
(1) |
s + t |
將s 和 t 串聯,返回一個新的序列 |
(6)(7) |
s * n or n * 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中出現的總次數 | |
相同的列表類型支持比較。實際上,元組和列表通過比較對應索引位置的元素進行。也就是說,如果兩個列表或者元組對象相等,那么它們的長度需要相同並且每一個元素必須相等。
注釋:
-
in
和not in操作一般只用於普通的包含測試
, 一些特殊的序列,例如str、bytes、bytearray也將它們用於子序列測試:>>> "gg" in "eggs" True
-
小於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]]
- 如果i或j是負的,那么索引是相對於列表s末尾的,被替換為:
len(s) + i
或len(s) + j。但是-0還是0.
-
從i到j的分片操作定義一個新的帶有索引k的項的序列,
i <= k < j。如果i或者j大於
len(s)
, 使用len(s)。如果i被省略,使用0。如果j被省略,使用len(s)。如果i大於等於j,那么返回的片段是空的。
(未完待續)