Python基礎與拾遺3:Python中的串列
- 串列相關定義
- 串列相關操作
本篇博文,主要總結Python中的串列及相關操作,
串列相關定義
- 串列是任意物件的有序集合,可存放任意物件,
a = [1, 2, 3, 4, 5]
a = [1, "2", 3, "4", 5]
a = [1, {"a":2, "b":3}, 3, "4", 5]
- 串列通過偏移進行讀取,
a = [1, {"a":2, "b":3}, 3, "4", 5]
a[1] # {'a': 2, 'b': 3}
a[-1] # 5
a[5] # IndexError: list index out of range
- 串列支持可變長度、異構以及任意嵌套,串列可以實地地增長或者縮短,包含任意物件,可以創建串列的子串列,
a = [1, 2, 3, 4, [5, 6, 7, 8]]
- 串列是可變序列,支持原處修改,索引,分片與合并,當應用與字串上的合并與分片時,回傳新的串列,
a = [1, 2, 3, 4, 5, 6, 7, 8]
b = [-1, -2, -3, -4, -5, -6, -7, -8]
a[0] = 9 # [9, 2, 3, 4, 5, 6, 7, 8]
a[0] # 9
c = a[3:] # [4, 5, 6, 7, 8]
d = a[:5] # [9, 2, 3, 4, 5]
e = a[2:4] # [3, 4]
f = a[2:6:2] # [3, 5]
g = a[:] # [9, 2, 3, 4, 5, 6, 7, 8]
g == a # True
g is a # False
a + b # [9, 2, 3, 4, 5, 6, 7, 8, -1, -2, -3, -4, -5, -6, -7, -8]
- 串列是物件參考陣列,在Python解釋器內部,串列是一個C陣列,在串列中,物件是參考(改變物件的話,物件直接會改變)而不是拷貝,
串列相關操作
串列相關操作總結串列如下表所示,
| 操作 | 解釋 |
|---|---|
| L=[] | 一個空的串列 |
| L=[0,1,2,3] | 建立數字串列 |
| L=[‘abc’, [‘def’,‘ghi’]] | 建立嵌套的子串列 |
| L=list(‘spam’) | 建立可迭代專案串列,里面是一個字串 |
| L=list(range(-4,4)) | 建立連續整數的串列 |
| L[i] | 索引 |
| L[i][j] | 索引的索引 |
| L[i:j] | 分片 |
| len(L) | 求長度 |
| L1 + L2 | 合并 |
| L * 3 | 重復 |
| for x in L: print(x) | 迭代列印 |
| 3 in L | 成員關系判斷 |
| L.append(4) | 添加元素 |
| L.extend([5, 6, 7]) | 增長 |
| L.insert(I, X) | 在I位置插入元素X |
| L.Count(X) | 對元素X計數 |
| L.sort() | 排序 |
| L.reverse() | 反轉 |
| del L[k] | 洗掉指定位置元素 |
| del L[i:j] | 洗掉指定區間元素 |
| L.pop() | 洗掉(默認最后的)元素 |
| L.remove(2) | 洗掉第一個為2的元素 |
| L[i:j]=[] | 洗掉指定區間的元素 |
| L[i]=1 | 按照索引賦值 |
| L[i:j]=[4,5,6] | 按照分片賦值 |
| L = [x ** 2 for x in range(5)] | 串列決議(求平方) |
| list(map(ord, ‘spam’)) | 串列決議(轉ascii) |
- “+”兩側必須都是串列,表示合并操作,
- 在對串列進行分片時,回傳新的串列,參見本篇博文之前的用例,
- 在原處修改串列時,通過分片操作賦值,被賦值的序列長度不一定要與被賦值的分片長度相似,這一點可以被靈活地用來減短或增長串列,
a = [0, 1, 2, 3, 4, 5, 6, 7, 8]
a[2:5] = [3] # [0, 1, 3, 5, 6, 7, 8]
a = [0, 1, 2, 3, 4, 5, 6, 7, 8]
a[2:5] = [11, 22, 33, 44, 55, 66] # [0, 1, 11, 22, 33, 44, 55, 66, 5, 6, 7, 8]
- 在方法呼叫中,L.append(X)與L+[X],前者會原地修改L,后者會直接生成新的串列,
- append和sort方法呼叫都不會回傳一個新的串列,
- sort方法可以用key指定一個函式,
#!/usr/bin/python
# -*- coding: UTF-8 -*-
# 獲取串列的第二個元素
def takeSecond(elem):
return elem[1]
# 串列
random = [(2, 2), (3, 4), (4, 1), (1, 3)]
# 指定第二個元素排序
random.sort(key=takeSecond)
# 輸出類別
print '排序串列:', random
# 程式運行輸出:
# 排序串列:[(4, 1), (2, 2), (1, 3), (3, 4)]
- pop方法,可以洗掉一個元素,
extend方法,可以插入多個元素(直接extend一個串列),reverse方法反轉串列,
remove方法洗掉第一個查找到的元素,
a = [0, 1, 2, 3, 4, 5, 6, 7, 8]
a.pop() # 回傳8,a現在為[0, 1, 2, 3, 4, 5, 6, 7]
a.extend([11, 22, 33, 44, 55]) # [0, 1, 2, 3, 4, 5, 6, 7, 11, 22, 33, 44, 55]
a.reverse() # [55, 44, 33, 22, 11, 7, 6, 5, 4, 3, 2, 1, 0]
a.remove(44) # [55, 33, 22, 11, 7, 6, 5, 4, 3, 2, 1, 0]
- sorted和reserved方法會回傳新的串列,但是reserved方法是一個迭代器,所以回傳新的串列時需要加上list(),
a = [1, 6, 2, 3, 7, 8, 4, 9]
b = sorted(a) # [1, 2, 3, 4, 6, 7, 8, 9]
c = reversed(a) # <list_reverseiterator object at 0x0000029D17861EB0>
c = list(reversed(a)) # [9, 4, 8, 7, 3, 2, 6, 1]
- 將空串列賦值給分片,可以洗掉一個片段,將空串列賦值給索引,只會將指定位置的元素替換成一個空串列,
a = [0, 1, 2, 3, 4, 5, 6, 7, 8]
a[1:5] = [] # [0, 5, 6, 7, 8]
a = [0, 1, 2, 3, 4, 5, 6, 7, 8]
a[1] = [] # [0, [], 2, 3, 4, 5, 6, 7, 8]
以上,歡迎各位讀者朋友提出意見或建議,
歡迎閱讀筆者后續博客,各位讀者朋友的支持與鼓勵是我最大的動力!
written by jiong
大王叫我來巡山,
我把人間轉一轉,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/256798.html
標籤:python
