天天看點

python學習日記【06 - 清單學習筆記】序列(sequence)清單(list)清單的基本操作

清單學習筆記

  • 序列(sequence)
    • 序列是什麼
    • 序列有哪些
  • 清單(list)
    • 清單是什麼
  • 清單的基本操作
    • 切片
      • 文法及代碼示例
    • 通用操作
      • 代碼示例
    • 清單的修改(切片和del)
      • 代碼示例
    • 清單的方法
      • append() 添加
        • 代碼示例
      • insert()插入
        • 代碼示例
      • extend()擴充
        • 代碼示例
      • pop()删除
        • 代碼示例
      • remove()删除
        • 代碼示例
      • reverse()翻轉
        • 代碼示例
      • sort()排序
        • 代碼示例
    • 周遊清單
      • for循環周遊清單及示例
      • range(start, stop[, step])用法及示例

序列(sequence)

序列是什麼

  • 序列是Python中最基本的一種資料結構。序列用于儲存一組有序的資料,所有的資料在序列當中都有一個唯一的位置(索引)并且序列中的資料會按照添加的順序來配置設定索引
  • 資料結構指計算機中資料存儲的方式

序列有哪些

  • 可變序列(序列中的元素可以改變):例如 清單(list)字典(dict)
  • 不可變序列(序列中的元素不能改變):例如 字元串(str)元組(tuple)

清單(list)

清單是什麼

  • 清單是Python中的一個對象
  • 清單的作用
    • 清單中可以儲存多個有序的資料
    • 清單是用來存儲對象的對象

清單的基本操作

切片

  • 通過切片來擷取指定的元素
  • 通過切片擷取元素時,會包括起始位置的元素,不會包括結束位置的元素
  • 起始位置和結束位置的索引可以不寫
    • 如果省略結束位置, 則會從目前的開始位置一直截取到最後
    • 如果省略開始位置, 則會從第一個元素截取到結束的元素,但是不包括結束的元素
    • 如果開始位置和結束位置都省略, 則則會從第一個元素開始截取到最後一個元素
    • 步長表示每次擷取元素的間隔,預設是1(可以省略不寫)
    • 步長不能是0,但可以是是負數

文法及代碼示例

  • 文法: 清單[起始 : 結束 : 步長]
list1 = [1,2,3,4,5,6,7,8,9]
>>> list1[1:5]
[2, 3, 4, 5]
>>> list[1:5:2]
>>> list1[1:5:2]
[2, 4]
# 反轉清單
>>> list1[::-1]
[9, 8, 7, 6, 5, 4, 3, 2, 1]
           

通用操作

  • + 和 *
  • + 可以将兩個清單拼接成一個清單
  • * 可以将清單重複指定的次數 (注意2個清單不能夠做乘法,要和整數做乘法運算)
  • in 和 not in
  • in用來檢查指定元素是否在清單當中
  • not in 用來檢查指定元素是否不在清單當中
  • len() 擷取清單中元素的個數
  • max() 擷取清單中最大值
  • min() 擷取清單中最小值
  • list.index(x[, start[, end]])
  • 第一個參數 擷取指定元素在清單中的位置
  • 第二個參數 表示查找的起始位置
  • 第三個參數 表示查找的結束位置
  • list.count(x) 統計指定元素在清單中出現的個數

代碼示例

# + 和 *
>>> list1 = [1,2,3]
>>> list2 = [4,5,6]
>>> list1 + list2 # 兩個清單相加
[1, 2, 3, 4, 5, 6]
>>> list1 * 3
[1, 2, 3, 1, 2, 3, 1, 2, 3]

# in 和 not in
>>> list1 = [1,2,3,4,5,6]
>>> 1 in list1 # 1 是否在list1中
True
>>> 7 in list1
False
>>> 1 not in list1 # 1 是否不在list1中
False
>>> 7 not in list1
True

# len()
>>> list1 = [1,2,3,4,5,6]
>>> len(list1) # 擷取list清單中元素的個數
6

# max()和min()
>>> max(list1)
6
>>> min(list1)
1

# list.index(x[, start[, end]])
>>> list1 = [1,2,3,4,5,6,7,8,9]
>>> list1.index(2)
1
>>> list1.index(9)
8
>>> list1 = ['hello', 'python', 'world']
>>> list1.index('hello')
0
>>> list1.index('python')
1
>>> list1.index('hello', 1, 2) # 查找不到,則抛出ValueError異常
Traceback (most recent call last):
  File "<input>", line 1, in <module>
ValueError: 'hello' is not in list

# list.count(x)
>>> list1 = [1,1,2,3,4,4,4,5,6]
>>> list1.count(1)
2
>>> list1.count(4)
3
>>> list1.count(10) # 10不存在于清單,則出現0次
0
           

清單的修改(切片和del)

  • 通過切片來修改(起始就是給切片的内容重新指派,但是指派的内容必須是一個序列)
  • 當設定了步長時,序列中元素的個數必須和切片中元素的個數保持一緻
  • 通過切片來删除元素
  • del list[起始 : 結束]
  • list = []

代碼示例

  • 通過切片修改
>>> list1 = [1,2,3,4,5,6]
>>> list1[1:3] = ['a','b','c','d'] 
[1, 'a', 'b', 'c', 'd', 4, 5, 6]
# 指定步長
>>> list1 = [1,2,3,4,5,6]
>>> list1[1:5:2] = ['a','b'] 
>>> list1
[1, 'a', 3, 'b', 5, 6]
# 指定步長 如果序列中元素的個數和切片中元素的個數不一緻
# 則會抛出 ValueError 異常
>>> list1[1:5:2] = ['a','b','c']
Traceback (most recent call last):
  File "<input>", line 1, in <module>
ValueError: attempt to assign sequence of size 3 to extended slice of size 2

           
  • 通過del關鍵字修改
>>> list1 = [1,2,3,4,5,6]
>>> del list1[1] # 删除清單中索引為1的元素
[1, 3, 4, 5, 6]
>>> del list1[1:3] # 删除索引為1到索引為3(不包含)的元素
>>> list1
[1, 5, 6]
# 如果索引超過清單,則抛出IndexError異常
>>> del list1[10]
Traceback (most recent call last):
  File "<input>", line 1, in <module>
IndexError: list assignment index out of range
           

清單的方法

append() 添加

  • append() 向清單的最後添加一個元素

代碼示例

>>> list1 = [1,2,3,4]
>>> list1.append(5)
[1, 2, 3, 4, 5]
           

insert()插入

  • insert(arg1,arg2) 像清單指定位置插入一個元素 參數1:要插入的位置 參數2:要插入的元素

代碼示例

>>> list1 = [1,2,3,4]
>>> list1.insert(0,'a')
['a', 1, 2, 3, 4]
>>> list1.insert(3,'a')
['a', 1, 2, 'a', 3, 4]
           

extend()擴充

  • extend(iterable) 使用一個新的序列來擴充目前序列(它會将該序列的中元素添加到清單中) 參數需要傳遞一個序列

代碼示例

>>> list1 = [1,2,3,4]
>>> list2 = [5,6,7]
>>> list1.extend(list2)
>>>> list1
[1, 2, 3, 4, 5, 6, 7]
           

pop()删除

  • pop() 根據索引删除并傳回指定元素

代碼示例

>>> list1 = [1,2,3,4]
>>> list1.pop(1) # 删除索引為1的元素,并傳回該元素
2
>>> list1
[1, 3, 4]
           

remove()删除

  • remove() 删除指定元素 (如果相同值的元素有多個,隻會删除第一個)

代碼示例

>>> list1 = [1,2,3,4]
>>> list1.remove(2) # 删除值為2的元素,非索引
>>> list1
[1, 3, 4]

           

reverse()翻轉

  • reverse() 翻轉清單

代碼示例

>>> list1 = [1,2,3,4]
>>> list1.reverse() # 把清單順序反轉
>>> list1
[4, 3, 2, 1]
           

sort()排序

  • sort(key=None,reverse=False) 用來對清單中的元素進行排序

代碼示例

>>> list1 = [3,2,1,5,4,8,5,11,2,4]
>>> list1.sort() # 預設按照正序排列
>>> list1
[1, 2, 2, 3, 4, 4, 5, 5, 8, 11]
>>> list1 = [3,2,1,5,4,8,5,11,2,4]
>>> list1.sort(reverse=False) # 指定reverse=False按照倒序排列
>>> list1
[1, 2, 2, 3, 4, 4, 5, 5, 8, 11]
           

周遊清單

for循環周遊清單及示例

  • for循環的代碼塊會執行多次,序列中有幾個元素就會執行幾次。每執行一次就會将序列中的一個元素指派給變量,是以我們可以通過變量來擷取清單中的元素
for 變量 in 序列(周遊的規則):
    代碼塊

>>> list1 = [1,2,3,4,5]
>>> for i in list1:
...    print(i)
1
2
3
4
5
           

range(start, stop[, step])用法及示例

參數說明

  • ·start: 計數從 start 開始。預設是從 0 開始。例如range(5)等價于range(0, 5);
  • stop: 計數到 stop 結束,但不包括 stop。例如:range(0, 5) 是[0, 1, 2, 3, 4]沒有5
  • step:步長,預設為1。例如:range(0, 5) 等價于 range(0, 5, 1)
>>> for i in range(5):
...    print(i)
...    
0
1
2
3
4

>>> for i in range(1,5):
...    print(i)
...    
1
2
3
4

>>> for i in range(1,5,2):
...    print(i)
...    
1
3