Python學習筆記——序列

Python學習筆記——序列

1. 列表連接方式

1.1 通過“+” 號連接 (創建新的對象,並需要複製對象)

[1, None, True] + ['abc', (2, 3), 4]
Out[3]: [1, None, True, 'abc', (2, 3), 4]

1.2 通過 extend 方式連接 (將元素添加到原有列表)

x = [1, None, True]
x.extend(['abc', (2, 3), 4])
x
Out[6]: [1, None, True, 'abc', (2, 3), 4]
比較
  • 通過 + 號連接列表需要相對更高的代價,因爲在連接過程中創建了新列表,並還需要複製對象。當需要構建一個大型列表時,這種代價將更明顯。
# 較好的方式
everything = []
for chunk in list_of_lists:
    everything.extend(chunk)
# 較高代價的方式
everything = []
for chunk in list_of_lists:
    everything = everything + chunk

2. 切片

2.1 基本形式 start: end

使用切片符號(切片符號爲:[])可以對大多數序列類型選取其子集

seq = [7, 2, 3, 7, 5, 6, 0, 1]
seq[1:5]
Out[8]: [2, 3, 7, 5]

2.2 切片賦值

# 原seq [7, 2, 3, 7, 5, 6, 0, 1]
seq[3:4] = [6, 3]
seq
Out[10]: [7, 2, 3, 6, 3, 5, 6, 0, 1]

2.3 缺省索引

索引 startstop 可以省略,若省略,則默認傳入序列的起始位置或結束位置

# 原seq [7, 2, 3, 6, 3, 5, 6, 0, 1]
seq[:5]
Out[14]: [7, 2, 3, 6, 3]

2.4 負索引

負索引可以從序列的尾部進行索引

# 原seq [7, 2, 3, 6, 3, 5, 6, 0, 1]
seq[-4:]
Out[15]: [5, 6, 0, 1]

2.5 步進值

通過設置步進值(在第二個冒號後)x可以達到每隔x個數取一個值:

# 原seq [7, 2, 3, 6, 3, 5, 6, 0, 1]
seq[::2]
Out[16]: [7, 3, 3, 6, 1]

2.6 騷操作(操作很騷,劃重點)

如果需要得到翻轉後的序列,可以設置步進值爲 -1

# 原seq [7, 2, 3, 6, 3, 5, 6, 0, 1]
seq[::-1]
Out[17]: [1, 0, 6, 5, 3, 6, 3, 2, 7]

3. 內建函數

3.1 enumerate

返回序列的 (i, value) 元組,其中 i 爲元素索引, value 爲元素值

# 原seq [7, 2, 3, 6, 3, 5, 6, 0, 1]
for i, value in enumerate(seq):
    print(i, value)
0 7
1 2
2 3
3 6
4 3
5 5
6 6
7 0
8 1

3.2 sorted

返回一個根據任意序列中元素新建的已排序列表

# 原seq [7, 2, 3, 6, 3, 5, 6, 0, 1]
sorted(seq)
Out[19]: [0, 1, 2, 3, 3, 5, 6, 6, 7]

3.3 zip

zip 將列表、元組或其他序列的元素配對,新建一個元組構成的列表:

seq1 = ['foo', 'bar', 'baz']
seq2 = ['one', 'two', 'three']
zipped = zip(seq1, seq2)
list(zipped)
Out[25]: [('foo', 'one'), ('bar', 'two'), ('baz', 'three')]

配對的序列長度可任意,生成的列表長度由最短的序列決定

給定一個已 “配對” 序列時,zip函數可 “拆分” 序列, (配合解包操作)

騷操作,騷操作,騷操作!!!

pitchers = [('Nolan', 'Ryan'), ('Roger', 'Clemens'), ('Schulling', 'Curt')]
first_names, last_names = zip(*pitchers)
first_names
Out[28]: ('Nolan', 'Roger', 'Schulling')
last_names
Out[29]: ('Ryan', 'Clemens', 'Curt')

*用在序列之前是 對序列進行解包然後傳遞給多個單變量參數

上述過程等價於:

a = (‘Nolan’, ‘Ryan’)

b = (‘Roger’, ‘Clemens’)

c = (‘Schulling’, ‘Curt’)

first_names, last_names = zip(a, b, c)

3.4 reversed

將序列倒序排列

# 原seq [7, 2, 3, 6, 3, 5, 6, 0, 1]
list(reversed(seq))
Out[34]: [1, 0, 6, 5, 3, 6, 3, 2, 7]

持續更新中……

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章