Python序列

 

1、列表

  • 有序
  • 編號,能夠經過編號訪問
  • 可遍歷
  • 可追加/可插入
  • 可刪除/能夠彈出
  • 可修改
  • 長度不定

一、列表定義

定義python

nums = [1, 5, 2, 3, 4, 5, 7, 9, 8, 2]
users = ["woniu", "wd", "kk", "pc"]
  • 使用中括號([])包含
  • 每一個元素之間使用逗號分隔
  • 可包含任意數據類型

二、訪問與修改列表

    1)訪問

  • 列表是有序數據集,經過列表名[索引]的方式訪問列表中的元素
  • 索引編號:

            從左向右依次爲 0, 1, 2, 3, ..., n-1數組

            從右向左依次爲 -1, -2, -3, ..., -napp

  • 訪問元素的索引必須存在,不然報錯

    2)元素修改

  • 經過直接給 列表名[索引] 修改對應索引位置的值
  • 修改元素的索引必須存在,不然報錯
In [5]: nums = [1, 5, 2, 3, 4, 5, 7, 9, 8, 2]

In [6]: nums[0] = 100

In [7]: nums[5] = 200

In [8]: nums[9] = 500

In [9]: print(nums)
[100, 5, 2, 3, 4, 200, 7, 9, 8, 500]

In [10]:

三、遍歷列表

    1)使用for訪問列表中全部的元素

In [10]: for num in nums:
    ...:     print(num)
    ...:     
100
5
2
3
4
200
7
9
8
500

In [11]:

    2)類型轉換

能夠經過函數list將其餘可遍歷的類型轉換爲列表ssh

In [11]: list("qbcdefg")
Out[11]: ['q', 'b', 'c', 'd', 'e', 'f', 'g']

In [12]:

    3)使用range函數快速建立序列

  • range(end) 建立從0到end-1的連續整數組成的序列
  • range(start, end) 建立從start 到 end-1的連續整數組成的序列
  • range(start, end, step) 建立從start 到 end-1的每間隔step個整數組成的序列
In [12]: list(range(0, 10))
Out[12]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

In [13]:

練習:

    1)找出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函數

四、列表常見操做

  • 獲取list元素的數量
In [14]: nums
Out[14]: [100, 5, 2, 3, 4, 200, 7, 9, 8, 500]

In [15]: len(nums)
Out[15]: 10

 

 

  • 獲取list中元素最大值、最小值
In [16]: max(nums), min(nums)
Out[16]: (500, 2)

In [17]:

 

  • 判斷元素是否在list中存儲
In [17]: 1 in nums
Out[17]: False

In [18]: 2 in nums
Out[18]: True

In [19]:

 

  • 刪除​​​​​​​​​​​​​​列表中的元素(根據索引刪除list中對應元素)spa

In [19]: del nums[0]

In [20]: nums
Out[20]: [5, 2, 3, 4, 200, 7, 9, 8, 500]

In [21]:

​​​​​​​​​​​​​​​​​​​​​五、列表運算

四則運算:code

  • 加(+)——必須爲兩個list相加
In [21]: [1, 2, 3] + [4, 5, 6]
Out[21]: [1, 2, 3, 4, 5, 6]
  • 乘(*)——必須是一個整數
In [22]: [1, 2, 3] * 3
Out[22]: [1, 2, 3, 1, 2, 3, 1, 2, 3]

六、切片

    1)按照規則獲取list中一部分元素生成新的list

  • list[start: end: step]
  • list[:: step]
  • list[start: end]
  • list[: end]
  • list[start:]
  • list[:]
In [23]: nums = list(range(10))

In [24]: nums
Out[24]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

In [25]: nums[: 5]
Out[25]: [0, 1, 2, 3, 4]

In [26]: nums[4:]
Out[26]: [4, 5, 6, 7, 8, 9]

In [27]: nums[4: 7]
Out[27]: [4, 5, 6]

In [28]: nums[2: 7: 2]
Out[28]: [2, 4, 6]

In [29]:

七、切片的應用

    1)複製數組

  • 引用
In [29]: nums = list(range(10))

In [30]: nums_1 = nums

In [31]: nums_1[1] = 20

In [32]: nums
Out[32]: [0, 20, 2, 3, 4, 5, 6, 7, 8, 9]

In [33]:
  • 複製
In [35]: nums
Out[35]: [0, 20, 2, 3, 4, 5, 6, 7, 8, 9]

In [36]: nums_2 = nums[:]

In [37]: nums_2[1] = 40

In [38]: nums
Out[38]: [0, 20, 2, 3, 4, 5, 6, 7, 8, 9]

In [39]: nums_2
Out[39]: [0, 40, 2, 3, 4, 5, 6, 7, 8, 9]

In [40]:
In [40]: id(nums)
Out[40]: 139966877693384

In [41]: id(nums_1)
Out[41]: 139966877693384

In [42]: id(nums_2)
Out[42]: 139966877738696

In [43]:

    2)反轉list

In [43]: nums[:: -1]
Out[43]: [9, 8, 7, 6, 5, 4, 3, 2, 20, 0]

In [44]:

    3)獲取索引爲偶數的元素組成的list

In [44]: nums[:: 2]
Out[44]: [0, 2, 4, 6, 8]

In [45]:

    4)獲取索引爲奇數的元素組成的list

In [46]: nums
Out[46]: [0, 20, 2, 3, 4, 5, 6, 7, 8, 9]

In [47]:

    5)經過切片進行list的增、刪、改

語法:list[start: end] = [v_1, v_2, v_3. ..., v_n]orm

使用列表list[start: end] = [v_1, v_2, v_3. ..., v_n]替換切片對應位置的元素排序

  • 切片元素數量 大於 [v_1, ..., v_n]數量

按照順序替換切片中的元素,切片中多餘的元素刪除索引

  • 切片元素數量 小於 [v_1, ..., v_n]數量

按照順序替換切片中的元素,賦值list中多餘的元素則添加到切片最右索引以後

In [48]: nums = list(range(10))

In [49]: nums
Out[49]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

In [50]: nums[1: 2]
Out[50]: [1]

In [51]: nums[1: 2] = [11, 12]

In [52]: nums
Out[52]: [0, 11, 12, 2, 3, 4, 5, 6, 7, 8, 9]

In [53]: nums[5:7]
Out[53]: [4, 5]

In [54]: nums[5:7] = [21]

In [55]: nums
Out[55]: [0, 11, 12, 2, 3, 21, 6, 7, 8, 9]

In [56]: nums[8:10]
Out[56]: [8, 9]

In [57]: nums
Out[57]: [0, 11, 12, 2, 3, 21, 6, 7, 8, 9]

In [58]: nums[8:10] = []

In [59]: nums
Out[59]: [0, 11, 12, 2, 3, 21, 6, 7]

In [60]: nums[:] = []

In [61]: nums
Out[61]: []

八、列表函數

  • append 添加元素到list最右側
  • clear 清空list中的元與
  • copy 複製list中的全部元素到新list中並返回
  • count 計算list中存在相同元素的數量
  • extend 將一個可遍歷數據中的全部元素追加到list後
  • index 獲取元素在list中的位置
  • insert 在list指定位置添加元素
  • pop 彈出list中指定位置的元素(默認最右側)
  • remove 移除list中指定的元素
  • reverse 對list中元素進行反轉
  • sort 對list中元素進行排序

     1)幫助函數

  • 查看數據類型可以使用的函數
In [62]: dir(list)
Out[62]: 
['__add__',
 '__class__',
 '__contains__',
 '__delattr__',
 '__delitem__',
 '__dir__',
 '__doc__',
 '__eq__',
 '__format__',
 '__ge__',
 '__getattribute__',
 '__getitem__',
 '__gt__',
 '__hash__',
 '__iadd__',
 '__imul__',
 '__init__',
 '__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']

In [63]:
  • 查看函數使用方法
In [63]: help(list.append)

Help on method_descriptor:

append(...)
    L.append(object) -> None -- append object to end

    2)列表函數

  • append
In [2]: nums = []

In [3]: nums
Out[3]: []

In [4]: nums.append(1)

In [5]: nums.append("abc")

In [6]: nums.append([2, 3, 4])

In [7]: nums
Out[7]: [1, 'abc', [2, 3, 4]]

In [8]:
  • extend
In [8]: nums = []

In [9]: nums
Out[9]: []

In [10]: nums.extend("abc")

In [11]: nums.extend([2, 3, 4])

In [12]: nums
Out[12]: ['a', 'b', 'c', 2, 3, 4]

In [13]:

  • clear
In [13]: nums = list(range(10))

In [14]: nums
Out[14]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

In [15]: nums.clear()

In [16]: nums
Out[16]: []

In [17]:
  • copy
In [17]: nums = list(range(10))

In [18]: nums
Out[18]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

In [19]: nums_3 = nums.copy()

In [20]: nums_3[1] = 30

In [21]: nums
Out[21]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

In [22]: nums_3
Out[22]: [0, 30, 2, 3, 4, 5, 6, 7, 8, 9]

In [23]:

 

 

 

 

 

  • count
In [23]: nums = list(range(10))

In [24]: nums
Out[24]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

In [25]: nums.count(4)
Out[25]: 1

In [26]: nums.count(-1)
Out[26]: 0

In [27]:
  • index
In [27]: nums = list(range(10))

In [28]: nums
Out[28]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

In [29]: nums.index(4)
Out[29]: 4

In [30]: nums.index(-1)
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-30-d837de89ae77> in <module>()
----> 1 nums.index(-1)

ValueError: -1 is not in list

In [31]:

  • pop
In [31]: nums
Out[31]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

In [32]: nums.pop()
Out[32]: 9

In [33]: nums.pop(1)
Out[33]: 1

In [34]: nums
Out[34]: [0, 2, 3, 4, 5, 6, 7, 8]

In [35]: nums.pop(10)
---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-35-0dd19aea6900> in <module>()
----> 1 nums.pop(10)

IndexError: pop index out of range

In [36]:
  • remove
In [37]: nums = list(range(10))

In [38]: nums
Out[38]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

In [39]: nums.remove(3)

In [40]: nums
Out[40]: [0, 1, 2, 4, 5, 6, 7, 8, 9]

In [41]: nums.remove(10)
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-41-59cce22df83b> in <module>()
----> 1 nums.remove(10)

ValueError: list.remove(x): x not in list

In [42]:

  • reverse
In [42]: nums = list(range(10))

In [43]: nums
Out[43]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

In [44]: nums.reverse()

In [45]: nums
Out[45]: [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
  • sort
In [46]: nums = [1, 5, 3, 4, 2]

In [47]: nums
Out[47]: [1, 5, 3, 4, 2]

In [48]: nums.sort()

In [49]: nums
Out[49]: [1, 2, 3, 4, 5]

In [50]:

九、列表

    1)隊列

  • 先進先出
  • list.append + list.pop(0)

    2)堆棧

  • 先進後出
  • list.append + list.pop

練習:

    1)Todolist

        提示用戶輸入do或者任務(非do)
        若是用戶輸入任務,則添加到list中
        若是用戶輸入do,當任務爲空時則打印「無任務」並退出,不然從list中根據先進先出原則打印以前輸入的一個任務

????

    2)獲取兩個list中相同的元素到第三個列表中

        nums_1 = [1, 2, 3, 4, 5, 3, 10, 11]
        nums_2 = [1, 2, 3, 1, 4, 5, 5, 3, 12, 34]

注:保證第二個練習中第三個列表中元素不重複

#encoding: utf-8
nums_1 = [1, 2, 3, 4, 5, 3, 10, 11]
nums_2 = [1, 2, 3, 1, 4, 5, 5, 3, 12, 34]

nums_3 = []
for num in nums_1:
	if num in nums_2:
		nums_3.append(num)

print(nums_3)

2、元組

不可變的列表

一、定義:

In [1]: nums = (1, 2, 4, 5, 7, 8, 9, 3, 2)

In [2]: users = ('kk', 'pc', 'wd', 'woniu', 'xuegao')
  • 使用小括號包含
  • 每一個元素之間使用逗號分隔
  • 可包含任意數據類型
  • 若是元組只有一個元素時,元素後的逗號不能省略
In [3]: nums = (1,)

In [4]: nums_2 = (1)

In [5]: type(nums), type(nums_2)
Out[5]: (tuple, int)

In [6]:

二、訪問與修改元組

    1)訪問

  • 元組是有序的數據集,經過元組名[索引]的方式訪問元組中的元素
  • 索引編號:

            從左向右依次爲 0, 1, 2, 3, ..., n-1

            從右向左依次爲 -1, -2, -3, ..., -n

  • 訪問元素的索引必須存在,不然報錯

    2)元素不能修改

三、遍歷元組

    1)使用for訪問元組中全部的元素

In [6]: for num in nums:
   ...:     print(num)
   ...:     
1

In [7]:

    2)類型轉換

  • 能夠經過函數tuple將其餘可遍歷的類型轉化爲元組
In [9]: tuple('abcdefg')
Out[9]: ('a', 'b', 'c', 'd', 'e', 'f', 'g')

In [10]: tuple([1, 2, 3, 4, 5, 6])
Out[10]: (1, 2, 3, 4, 5, 6)

In [11]: tuple(range(10))
Out[11]: (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)

In [12]:

四、元組常見操做

  • 獲取tuple元素的數量
In [17]: nums = tuple(range(10))

In [18]: nums
Out[18]: (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)

In [19]: len(nums)
Out[19]: 10

In [20]:
  • 獲取tuple中元素最大值、最小值
In [20]: max(nums), min(nums)
Out[20]: (9, 0)
  • 判斷元素是否在tuple中存儲
In [21]: 1 in nums
Out[21]: True

In [22]: 23 in nums
Out[22]: False

In [23]:

五、元組運算

    1)四則運算

  • 加(+)

必須爲兩個tuple相加

In [23]: (1, 2, 3) + (5, 6, 7)
Out[23]: (1, 2, 3, 5, 6, 7)

In [24]:
  • 乘(*)

必須爲一個整數

In [24]: (1, 2,3) * 5
Out[24]: (1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3)

In [25]:

六、元組切片

按照規則獲取tuple中一部分元素生成新的tuple

  • tuple[start:end:step]
  • tuple[::step]
  • tuple[start:end]
  • tuple[:end]
  • tuple[start:]
  • tuple[:]
In [25]: nums = tuple(range(10))

In [26]: nums
Out[26]: (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)

In [27]: nums[:3]
Out[27]: (0, 1, 2)

In [28]: nums[4:7]
Out[28]: (4, 5, 6)

In [29]: nums[4:7:2]
Out[29]: (4, 6)

In [30]:

七、元組的不可變性

In [30]: nums = (1, 2, [5, 6])

In [31]: nums[2]
Out[31]: [5, 6]

In [32]: nums[2] = [7, 8, 9]
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-32-370d2f16530e> in <module>()
----> 1 nums[2] = [7, 8, 9]

TypeError: 'tuple' object does not support item assignment

In [33]: nums[2].append(7)

In [34]: nums
Out[34]: (1, 2, [5, 6, 7])

In [35]:

爲何nums[2].append(7)執行成功了?

  • 不可變指的是元組內元素的值不可變
  • 對於list等複雜數據類型的爲引用方式存儲數據類型的地址,其地址不可變,但內部數據可變
In [35]: id(nums[2])
Out[35]: 140210392503816

In [36]: nums[2].append(8)

In [37]: id(nums[2])
Out[37]: 140210392503816

In [38]:

八、元組函數

  • count  計算tuple中存在相同元素的數量
  • index   獲取元素在tuple中的位置
In [38]: dir(tuple)
Out[38]: 
['__add__',
 '__class__',
 '__contains__',
 '__delattr__',
 '__dir__',
 '__doc__',
 '__eq__',
 '__format__',
 '__ge__',
 '__getattribute__',
 '__getitem__',
 '__getnewargs__',
 '__gt__',
 '__hash__',
 '__init__',
 '__iter__',
 '__le__',
 '__len__',
 '__lt__',
 '__mul__',
 '__ne__',
 '__new__',
 '__reduce__',
 '__reduce_ex__',
 '__repr__',
 '__rmul__',
 '__setattr__',
 '__sizeof__',
 '__str__',
 '__subclasshook__',
 'count',
 'index']

In [39]:

練習:

用戶管理:

  • 讓用戶在控制檯上輸入」find/list/add/delete/update/exit」格式字符串
  • 若是輸入add,則讓用戶繼續輸入用戶名、年齡、聯繫方式等數據,將用戶數據(用戶名, 年齡,聯繫方式),放入list中存儲,在放入list以前檢查用戶名不重複,若是重複,則提示用戶已存在    
  • 若是輸入delete,則讓用戶輸入」用戶名」字符串,根據用戶名查找list中數據,若存在數據則將該數據移除,若用戶數據不存在,則提示不存在
  • 若是輸入update,則讓用戶分別輸入用戶名、年齡、聯繫方式等數據,根據用戶名查找list中數據,若存在數據則將改數據更新爲新的(用戶名, 年齡,聯繫方式),若用戶數據不存在,則提示不存在
  • 若是用戶輸入find,則讓用戶輸入」用戶名」,根據用戶名查找list中數據用戶名等於字符串的用戶信息,並打印
  • 若是用戶輸入list,則打印全部用戶信息
  • 打印用戶第一個行數據爲用戶信息描述,從第二行開始爲用戶數據
  • 若是用戶輸入exit,則打印退出程序,並退出
相關文章
相關標籤/搜索