1. 程式人生 > >小白學 Python(10):基礎資料結構(列表)(下)

小白學 Python(10):基礎資料結構(列表)(下)

人生苦短,我選Python

前文傳送門

小白學 Python(1):開篇

小白學 Python(2):基礎資料型別(上)

小白學 Python(3):基礎資料型別(下)

小白學 Python(4):變數基礎操作

小白學 Python(5):基礎運算子(上)

小白學 Python(6):基礎運算子(下)

小白學 Python(7):基礎流程控制(上)

小白學 Python(8):基礎流程控制(下)

小白學 Python(9):基礎資料結構(列表)(上)

列表切片

一說到列表切片不知道各位同學有沒有想起來前面我們講過的字串切片,沒想起來的同學為自己的記憶默哀 3 秒鐘吧。

開個玩笑:)可以返回去看看之前的文章。

列表切片是指將列表其中的一部分切出來。

語法: list[起始索引:終止索引:步長間隔]

注意: 這裡的終止索引和字串切片是一樣的,並不會取到。

下面直接上程式碼,解析已經新增在註釋中。

其實我就是懶,不想一條一條拆開寫了,來打我呀~~~

list1 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

# 省略步長時預設為 1
print(list1[3:8])
# 步長為 2
print(list1[3:8:2])
# 從索引 3 開始取到最後
print(list1[3:])
# 從頭開始取,取到索引 8 ,並且索引 8 娶不到
print(list1[:8])
# 取所有,步長為 3
print(list1[::3])
# 從索引 1 開始,取到倒數第 2 個,並且倒數第 2 個 取不到
print(list1[1:-2])
# 取所有
print(list1[:])
# 取逆序列表
print(list1[::-1])
# 取逆序,並且步長為 2
print(list1[8:1:-2])

執行結果如下:

[3, 4, 5, 6, 7]
[3, 5, 7]
[3, 4, 5, 6, 7, 8, 9]
[0, 1, 2, 3, 4, 5, 6, 7]
[0, 3, 6, 9]
[1, 2, 3, 4, 5, 6, 7]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
[8, 6, 4, 2]

列表常用方法

我們這裡分別演示一下:

list.append(obj)

在列表末尾新增新的物件

list1.append("Python")
print(list1)

結果如下:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 'Python']

list.count(obj)

統計某個元素在列表中出現的次數

list2 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

list2.append("Python")
list2.append("Python")
list2.append("Python")
list2.append(1)
print(list2.count("Python"))
print(list2.count(1))

結果如下:

3
2

我們這裡分別統計了字串 "Python" 和數字 1 出現的次數。

list.extend(seq)

在列表末尾一次性追加另一個序列中的多個值(用新列表擴充套件原來的列表)

list1.extend(list2)

print(list1)

結果如下:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 'Python', 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 'Python', 'Python', 'Python', 1]

可以看到 list1 在經過 list2 的擴充套件後,同時含有了 list1 和 list2 的所有資料。

extend 和 append 非常像,但是 extend 一次可以新增一個列表,而 append 一次只能新增一個元素。

list.index(obj)

從列表中找出某個值第一個匹配項的索引位置

print(list1.index("Python"))

結果如下:

10

list.insert(index, obj)

將物件插入列表

index 是插入的索引值, obj 是要插入的元素。

list1.insert(0, "Hello")
print(list1)

list3 = [0, 1, 2]
list4 = [2, 2]
list3.insert(1, list4)
print(list3)

結果如下:

['Hello', 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 'Python', 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 'Python', 'Python', 'Python', 1]
[0, [2, 2], 1, 2]

當然插入時可以是一個單獨的元素,也可以是一個列表。

list.pop([index=-1])

移除列表中的一個元素(預設最後一個元素),並且返回該元素的值

list3.pop()
print(list3)

list3.pop(1)
print(list3)

結果如下:

[0, [2, 2], 1]
[0, 1]

同樣在移除索引的時候,可以移除一個元素,也可以移除一個列表。

list.remove(obj)

移除列表中某個值的第一個匹配項

list5 = [1, 2, 3, 4, 4, 5]
list5.remove(4)
print(list5)

結果如下:

[1, 2, 3, 4, 5]

list.reverse()

反向列表中元素

list5.reverse()
print(list5)

結果如下:

[5, 4, 3, 2, 1]

雖然我們剛才用步長為 -1 的形式同樣做到了列表逆序,但是這兩個操作是不一樣的。

list5 = [1, 2, 3, 4, 4, 5]
list5.remove(4)
print(list5)
print(id(list5))
list5.reverse()
print(list5)
print(id(list5))
print(id(list5[::-1]))

結果如下:

[1, 2, 3, 4, 5]
2629333420040
[5, 4, 3, 2, 1]
2629333420040
2629333420104

各位同學看明白了,通過步長獲得的逆序列表實際上是一個新的列表,在記憶體的地址發生了變動,而通過 list.reverse() 列印的逆序列表還是這個列表本身,它的記憶體地址並未發生改變。

list.sort( key=None, reverse=False)

對原列表進行排序

list6 = [2, 5, 1, 9, 6, 3]
list6.sort()
print(list6)
list6.sort(reverse=True)
print(list6)

結果如下:

[1, 2, 3, 5, 6, 9]
[9, 6, 5, 3, 2, 1]

怎麼樣,對列表進行正序和逆序排序是不是很簡單。

後面還有兩個方法 list.clear() (清空列表) 和 list.copy() (複製列表)我就不做演示,大家可以自己動手嘗試一下,有不清楚的可以在公眾號後臺留言問我。

示例程式碼

本系列的所有程式碼小編都會放在程式碼管理倉庫 Github 和 Gitee 上,方便大家取用。

示例程式碼-Github

示例程式碼-Gi