python序列(二)

  • 2020 年 1 月 14 日
  • 筆記

列表(list)

-

list的特點

1.有序  2.編號,可以通過編號訪問  3.可遍歷  4.可追加/可插入  5.可刪除/可以彈出  6.可修改  7.長度不定

list的定義:

1.使用中括弧包含  2.每個元素之間使用逗號分隔  3.可包含任意數據類型

####訪問list 1.列表是有序的數據集,通過列表名[索引]的方式訪問列表中的元素 2.索引編號 3.從左向右依次為0,1,2,3,…,n – 1 4.從右向左一次為-1,-2,-3,…,-n 5.訪問元素的索引必須存在,否則報錯 6.元素修改 7.通過直接給 列表名[索引] 修改對應索引位置的值 8.修改元素的索引必須存在,否則報錯 9.刪除 del

使用for訪問列表中所有的元素

1.類型轉換  2.可以通過函數list將其他可遍歷的類型轉化為列表  3.使用range函數快速創建序列  4.range(end) 創建從0到end-1的連續整數組成的序列  5.range(start, end) 創建從start到end-1的連續整數組成的序列  6.range(start, end, step)創建從start到end-1的每間隔stop個整數組成的序列

列表常見操作

1.獲取list元素的數量
>>> nums = [1,2,3,True,False,['a','b','c'],'zhangsan']  >>> len(nums)  7
2.獲取list中元素最大值、最小值
最大值:max  >>> max_l1 = [1,22,33,44,3,4,5]  >>> max(max_l1)  44    獲取list中元素的最小值:  >>> max_l1 = [1,22,33,44,3,4,5]  >>> min(max_l1)  1

#####3.判斷元素是否在list中存儲

>>> l1  [1, 22, 11, 13, 12, 14]  >>> 1 in l1  True  >>> 10 not in l1  True
4.根據索引刪除list中對應元素
>>> l1  [1, 22, 11, 13, 12, 14]  >>>  >>> del l1[2]  >>> l1  [1, 22, 13, 12, 14]

列表運算

  • 四則運算
    • 加(+)
    • 必須為兩個list相加
    • 乘(*)
    • 必須一個為整數
  • 練習: >>> l1 = [1,2,3] >>> l2 = [4,5,6] >>> l1 + l2 [1, 2, 3, 4, 5, 6] >>> l1 *3 [1, 2, 3, 1, 2, 3, 1, 2, 3] >>> l2 *2 [4, 5, 6, 4, 5, 6] ####按照規則獲取list中一部分元素生成新的list list[start:end:step] list[::step] list[start:end] list[:end] list[start:] list[:] 切片的應用
  • 複製數組 >>> num=list(range(10)) >>> num [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> nums_1 =num >>> nums_1[1]=20 >>> num [0, 20, 2, 3, 4, 5, 6, 7, 8, 9] >>> id(num) 140243791733960 用id(num)表示記憶體地址
  • 反轉 >>> n1 [0, 20, 2, 3, 4, 5, 6, 7, 8, 9] >>> >>> n1[::-1] [9, 8, 7, 6, 5, 4, 3, 2, 20, 0]
  • 獲取索引為偶數的元素組成的list >>> n1[::2] [0, 2, 4, 6, 8]
  • 獲取索引為奇數的元素組成的list >>> n1 [0, 20, 2, 3, 4, 5, 6, 7, 8, 9] >>> n1[::3] [0, 3, 6, 9] 列表函數
  • append 添加元素到list最右側
  • clear 清空list中的元素
  • copy 複製list中的所有元素到新list中並返回
  • count 計算list中存在相同元素的數量
  • extend 將一個可遍曆數據中的所有元素追加到list後
  • index 獲取元素在list中的位置
  • insert 在list指定位置添加元素
  • pop 彈出list中指定位置的元素(默認最右側)
  • remove 移除list中指定的元素
  • reverse對list中元素進行反轉
  • sort 對list中元素進行排序

##幫助函數

>>> dir(list())  ['__add__', '__class__', '__contains__',  '__delattr__', '__delitem__', '__dir__',  '__doc__', '__eq__', '__format__', '__ge__',  '__getattribute__', '__getitem__', '__gt__',  '__hash__', '__iadd__', '__imul__', '__init__',  '__init_subclass__', '__iter__', '__le__',  '__len__', '__lt__', '__mul__', '__ne__',  '__new__', '__reduce__', '__reduce_ex__',  '__repr__', '__reversed__', '__rmul__',  '__setattr__', '__setitem__', '__sizeof__',  '__str__', '__subclasshook__', 'append',  'clear', 'copy', 'count', 'extend', 'index',  'insert', 'pop', 'remove', 'reverse', 'sort']
  • 查看函數使用方法
>>> help(list.append)  Help on method_descriptor:    append(...)  L.append(object) -> None -- append object to end

函數:append 、 extend

描述

append

extend

參數類型

任意類型

可遍歷

返回值

無

無

功能

將參數中元素整體追加到list最右側

將可遍歷參數中的每個元素追加到list最右側

  • append
>>> nums  [1, 'zhangsan', [2, 3, 4]]  >>> nums.append('dxy')  >>> nums.append([1,23,4,[1,2,3]])  >>> nums  [1, 'zhangsan', [2, 3, 4], 'dxy', [1, 23, 4, [1, 2, 3]]]
  • extend >>> nums [1, 'zhangsan', [2, 3, 4]] >>> nums.append('dxy') >>> nums.append([1,23,4,[1,2,3]]) >>> nums [1, 'zhangsan', [2, 3, 4], 'dxy', [1, 23, 4, [1, 2, 3]]]

函數:Clear 、copy 描述 clear copy 參數類型 無 無 返回值 無 list 功能 清空list 賦值list的元素並返回

  • clear >>> nums [1, 'zhangsan', [2, 3, 4], 'dxy', [1, 23, 4, [1, 2, 3]]] >>> nums.clear() >>> nums []
  • copy >>> nums = [1,2,3,4,5] >>> nums_1 = nums.copy() >>> nums_1 [1, 2, 3, 4, 5] >>> nums_1[2] = 100 >>> nums [1, 2, 3, 4, 5] >>> nums_1 [1, 2, 100, 4, 5]

函數:count、index

描述

count

index

參數類型

任意類型

任意類型

返回值

lnt

int

功能

獲取元素在list中出現的次數

獲取元素在list中的位置,不存在則報錯,可指定查找list start和end範圍

  • count >>> nums = list(range(10)) >>> nums [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> nums.count(3) 1 >>> nums.count(-1) 0

  • index >>> nums [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> nums.index(4) 4 >>> nums.index(-1) Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: -1 is not in list >>> nums.index(2) 2 >>> nums.index(6) 6

函數:pop、remove

描述

pop

remove

參數類型

整數

任意

返回值

任意

無

功能

根據索引刪除list中元素,並返回,若索引在list中不存在則報錯

從list中刪除指定的值,若值不存在,則報錯

  • pop >>> nums [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> nums.pop() 9 >>> nums.pop() 8 >>> nums [0, 1, 2, 3, 4, 5, 6, 7] >>> nums.pop(3) 3 >>> nums.pop(5) 6 >>> nums [0, 1, 2, 4, 5, 7]

  • remove >>> nums = [1,2,3,4,5,6,7,8] >>> nums [1, 2, 3, 4, 5, 6, 7, 8] >>> nums.remove(4) >>> nums.remove(8) >>> nums [1, 2, 3, 5, 6, 7] >>>

函數 reverse sort 描述 reverse sort 參數類型 無 排序規則、是否反轉 返回值 無 無 功能 對list的元素是否反轉 對list中的元素進行排序


  • reverse >>> nums [1, 2, 3, 5, 6, 7] >>> nums.reverse() >>> nums [7, 6, 5, 3, 2, 1]
  • sort >>> le [1, 6, 7, 4, 3, 9, 10] >>> le.sort() >>> le [1, 3, 4, 6, 7, 9, 10]
  • 隊列
    • 先進先出
    • list.append + list.pop(0)
  • 堆棧
    • 先進後出
    • list.append + list.pop 練習程式碼: jobs = []

while True: prompt = input('請輸入任務名稱/do:') if prompt == 'do': if jobs: print('請完成任務:' + jobs.pop(0)) else: print('所有任務已完成,可以放心下班啦') break else: jobs.append(prompt)

常用函數:len max min sum  -      len 顯示列表的長度      max 顯示列表的最大值      min 顯示列表的最小值      sum 顯示所有元素的和    ##元組介紹    * 不可變的列表  * 定義  * 使用小括弧包含  * 每個元素之間使用逗號分隔  * 可包含任意數據類型  * 如果元組只有一個元素時,元素後的逗號不能省略    元組與列表相同的操作:  -  * 使用方括弧加下標訪問元素  * 切片(形成新元組對象)  * count()/index()  * len()/max()/min()/tuple()  ** **  元組中不允許的操作:  -  * 修改、新增元素  * 刪除某個元素(但可以刪除整個元組)  * 所有會對元組內部元素髮生修改動作的方法。例如,元組沒有remove,append,pop等方法。    訪問與修改元組  -  -   訪問  - 元組是有序的數據集,通過元組名[索引]的方式訪問元組中的元素  - 索引編號  - 從左向右依次為0,1,2,3,…,n – 1  - 從右向左一次為-1,-2,-3,…,-n  - 訪問元素的索引必須存在,否則報錯  - 元素不能修改    元組的四則運算  -    - 加(+)      - 必須為兩個tuple相加  - 乘(*)      - 必須一個為整數  ```python  練習:  >>> (1,2,3)+(4,5,6)  (1, 2, 3, 4, 5, 6)  >>> (1,2,3)*2  (1, 2, 3, 1, 2, 3)

python表達式

結果

描述

len(1,2,3)

3

計算元素的長度

(1,2,3)+(4,5,6)

(1,2,3,4,5,6)

相加-連接

('Hi!',)*4

('H!,',('H!,',('H!,',('H!,')

複製

3 in(1,2,3)

True

元素是否存在

for x in(1,2,3):print(x)

123

遍歷


遍曆元組

  • 使用for訪問元組中所有的元素
  • 類型轉換
  • 可以通過函數tuple將其他可遍歷的類型轉化為元組 >>> tuple(range(10)) (0, 1, 2, 3, 4, 5, 6, 7, 8, 9) 元組常見操作
  • 獲取tuple元素的數量
  • 獲取tuple中元素最大值、最小值
  • 判斷元素是否在tuple中存儲 >>> nums (1, 2, 3, 4, 5) >>> len(nums) 5 >>> max(nums) 5 >>> 2 in nums True >>> 10 not in nums True 元組的四則運算
  • 加(+)
    • 必須為兩個tuple相加
  • 乘(*)
    • 必須一個為整數 >>> t1 = (1,2,3) >>> t2 = (4,5,6) >>> t1 + t2 (1, 2, 3, 4, 5, 6) >>> t1 *2 (1, 2, 3, 1, 2, 3)
元組的切片  -  - 按照規則獲取tuple中一部分元素生成新的tuple      - tuple[start:end:step]      - tuple [::step]      - tuple[start:end]      - tuple[:end]      - tuple [start:]      - tuple[:]  ```python  >>> nums = tuple(range(10))  >>> nums  (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)  >>> nums[:3]  (0, 1, 2)  >>> nums[4:7]  (4, 5, 6)  >>> nums[4:7:2]  (4, 6)

元組的不可變性

  • 不可變指的是元組的內元素的值不可變
  • 對於list等複雜數據類型的為引用方式存儲數據類型的地址,其地址不可變,但內部數據可變
  • count 計算tuple中存在相同元素的數量
  • index 獲取元素在tuple中的位置
  • split 分割
  • 元組只保證它的一級子元素不可變,對於嵌套的元素內部,不保證不可變! >>> tup = ('a', 'b', ['A', 'B']) >>> tup[2][0] = 'X' >>> tup[2][1] = 'Y' >>> tup ('a', 'b', ['X', 'Y'])

>>> l1 (1, 2, [5, 6]) >>> >>> >>> l1[2] [5, 6] >>> l1[2] = [11,22,33] Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'tuple' object does not support item assignment


元組函數

count 計算tuple中存在相同元素的數量 index 獲取元素在tuple中的位置

>>> dir(tuple)  ['__add__', '__class__',  '__contains__', '__delattr__',   '__dir__', '__doc__', '__eq__',   '__format__', '__ge__', '__getattribute__',   '__getitem__', '__getnewargs__', '__gt__',   '__hash__', '__init__', '__init_subclass__',    '__iter__', '__le__', '__len__', '__lt__',    '__mul__', '__ne__', '__new__',    '__reduce__', '__reduce_ex__',    '__repr__', '__rmul__', '__setattr__',    '__sizeof__', '__str__', '__subclasshook__',     'count', 'index']

課堂練習

  • 找出 nums=[6, 11, 7, 9, 4, 2, 1]中最大的數字
  • 移動nums中最大的數字到最後

  • 從右到左依次兩兩比較,如果前面比後面大,則交換位置
  • 第1次: 6,11比較,前面小,不交換[6, 11, 7, 9, 4, 2, 1]
  • 第2次: 11, 7比較,前面大,交換[6, 7, 11, 9, 4, 2, 1]
  • 第3次: 11, 9比較,前面大,交換[6, 7, 9, 11, 4, 2, 1]
  • 第4次: 11, 4比較,前面大,交換[6, 7, 9, 4, 11, 2, 1]
  • 第5次: 11, 2比較,前面大,交換[6, 7, 9, 4, 2, 11, 1]
  • 第6次: 11, 1比較,前面大,交換[6, 7, 9, 4, 2, 1, 11]
  • 交換元素
  • tmp = a; a=b; b = tmp;
  • a, b = b, a

nums=[6, 11, 7, 9, 4, 2, 1]

for i in range(len(nums)-1): for idx in range(len(nums)-1): if nums[idx] > nums[idx +1]: tmp = nums[idx] nums[idx] = nums[idx + 1] nums[idx +1] = tmp print(nums)

練習2  -    * 獲取兩個list中相同的元素到第三個列表中  * nums_1 = [1, 2, 3, 4, 5, 3, 10, 11]  * nums_2 = [1, 2, 3, 1, 4, 5, 5, 3, 12, 34]  * 保證第二個練習中第三個列表中元素不重複    ```python  nums1 = [1,2,3,4,5,3,10,11]  nums2 = [1,2,3,1,4,5,5,3,12,24]  nums3 = []    for i in nums1:      if i in nums2 and i not in nums3:          nums3.append(i)  print(nums3)

None

  • None 表示什麼都沒有
  • python中None代表一個特殊的空值,即為一個空對象,沒有任何的值
  • 練習中 None 解決nums負值的問題 nums = [-1,-2,-3,-4,11,22]

first_num = None for num in nums: if first_num is None: first_num = num elif num > first_num: first_num = num print(first_num)

Tags: