1. 程式人生 > >Python容器--list, tuple, dict, set

Python容器--list, tuple, dict, set

差集 express 賦值 大括號 占用 字典 由於 xtend insert

## Python 中有四種用於存放數據的序列--list, tuple, dict, set


## list 列表
  - 可以存放任意類型數據的有序序列
  - 列表可以由零個或多個元素組成,元素之間用逗號分開,整個列表被方括號所包裹:
  - 創建
    - 使用[]或者list()創建列表
    - new_list = ["Stanley", "Loves", "Lily"]


  - 訪問及修改
    - 使用列表名[索引]來訪問和修改列表元素,索引初始值為0,最大值不超過列表長度 - 1
    - print(new_list[1]) # -> "Loves"

    - new_list[1] = "Adore"
    - print(new_list) # -> [‘Stanley‘, ‘Adores‘, ‘Lily‘]
    - 若索引可以為負數,則是從列表末尾以-1為初始值開始計數


  - 使用[start, end, step]分片生成新的列表(新列表和舊列表位於不同內存地址)
    - [:]提取從開頭到結尾的整個字符串
    - [start:]從start提取到結尾
    - [:end]從開頭提取到 end - 1
    - [start:end]從start提取到end - 1

    - [start:end:step]從start提取到end - 1,每隔step個字符提取
    - start,end,step可以為負數,start和end為負數表示從右往左數,從-1開始計數,step為負數則表示倒序


  - 與列表有關的常用函數
    - len(a_list):返回列表長度
    - a_list.append(新元素):將新元素添加至列表末尾
    - a_list.extend(another_list):將another_list添加至a_list末尾,可以使用 += 達到相同效果, a_list += another_list

    - a_list.insert(index, 新元素):將新元素插入列表指定位置,若index的值大於列表長度,則將新元素插入列表末尾
    - del a_list[index]:刪除指定位置的元素,index的值必須小於列表長度
    - del不是函數,而是Python語句,是賦值語句(=)的逆過程,它將變量和值之間的綁定解除
    - a_list.remove(元素):刪除指定值的元素
      a_list = [‘a‘, ‘b‘, ‘c‘]
      a_list.remove(‘b‘)
      print(a_list) # -> [‘a‘, ‘c‘]
    - a_list.pop(index):彈出指定位置的元素,index默認為-1
    - a_list.index(元素):如果列表中存在指定元素,則返回該元素的索引
    - 使用 in 判斷某列表中是否存在某值,若存在,返回True,若不存在,返回False
    - a_list.count(元素):返回元素中某元素出現的次數
    - a_list.sort():列表排序,默認為升序,通過添加參數 reverse=True 可以改變為降序排列
    - a_list.copy():返回一個不同內存地址但列表值相同的新列表,淺拷貝,只能拷貝一層內容,對於嵌套列表的內存地址不做改變


  - 列表修改問題
    - 示例:
      a = [1, 2, 3] # -> 創建新列表
      b = a # -> 讓b和a指向同一內存地址
      b[1] = "a" # -> 通過b修改列表中第二個元素
      print(a) # 輸出[1, ‘a‘, 3],由於指向同一內存,因此對b的修改同樣會影響到a

  - 可以通過copy()函數、list()轉換函數和[:]分片生成新的不同內存地址的列表,如此對新列表的修改就不會影響到舊列表的內容


## tuple 元組
  - 使用()或者tuple()創建元組
  - 元組可以看作不可更改的列表
  - 相對而言,元組比列表占用的空間少
  - 元組特性和列表基本相同,但不能使用更改元素內容的相關函數,例如append()、insert()等
  - 創建註意事項
    - 若元組內只有一個元素,在元素後需要有一個逗號表示這是一個元組
    - 也可以不用括號創建,但需要在元素後需要有一個逗號表示這是一個元組
      a = 1,
      print(type(a)) # -> <class ‘tuple‘>

## dict 字典
  - 一種組合數據,沒有順序,數據以鍵值對的形式出現
  - 創建: d = {} 或者 d = dict()
    d = {
      key1: value1,
      key2: value2,
      ...
      key_n: value_n
    }


  - 特性
    - 字典是序列類型,但是是無序序列,所以沒有索引和切片
    - 字典中的所有數據都是鍵值對
    - key必須是可哈希的數值,比如int str, float, tuple等,但是list, set, dict等不行
    - value可以是任何值
    - 刪除: del dic[key] # -> 刪除整個鍵值對


  - 相關函數
    - d.keys():返回字典的鍵
    - d.values():返回字典的值
    - d.items():以列表的格式返回字典數據
      d = {
        "Name": "Stanley",
        "Age": 22
      }
      print(d.items()) # -> dict_items([(‘Name‘, ‘Stanley‘), (‘Age‘, 22)])
    - d.clear():清空
    - d.get(key[, 默認值]):根據制定鍵,返回相應值,好處是可以設置默認值,若參數key在字典中不存在,則不會報錯,而是返回傳入的默認值
    - dict.fromkeys():使用指定的序列作為鍵,使用一個值作為字典的所有鍵的值
      a_list = [1, 2, 3, 4]
      d = dict.fromkeys(a_list, "LOVE")
      print(d)  # -> {1: ‘LOVE‘, 2: ‘LOVE‘, 3: ‘LOVE‘, 4: ‘LOVE‘}

# set 集合
  - 集合是高中數學中的一個概念
  - 一堆確定的無序的唯一的數據
  - 同樣可以使用大括號定義,但大括號內必須有值


  - 特征:
    - 集合內數據無序,即無法使用索引和切片
    - 集合內部數據具有唯一性,可以用來排除重復數據
    - 集合內的數據,str, int, float, tuple等可哈希的數據
    - 集合本身不可哈希


  - 函數:
    - s.add():向集合中添加元素
    - s.clear():清空集合(原集合操作)
    - s.copy():淺拷貝
    - s.remove(值):移除指定值,若集合中沒有該值會報錯
    - s.discard(值):移除指定值,若集合中沒有該值不會報錯
    - s.pop():隨機彈出集合中的一個值,沒有參數
    - s1.intersection(s2):交集
    - s1.difference(s2):差集
    - s1.union(s2):並集
    - s1.issubset(s2):檢查集合s1是否是集合s2的子集
    - s1.issuperset(s2):檢查集合s1是否是集合s2的超集


  - 集合的數學操作
    s1 = {1, 2, 3}
    s2 = {2, 3, 4, 5}
    s3 = s2 - s1
    print(s3) # -> {4, 5}


  - frozen set 冰凍集合
    - 冰凍集合就是不可以進行任何修改的集合
    - 創建:s = frozenset()
    - 這是一種特殊的集合,具備除了修改外集合的所有特性

## list, tuple, dict, set 都可以使用推導式生成
  - 列表推導式格式:[ expression for item in iterable if condition],if過濾條件可以省略,該格式同樣適用於tuple和set,但中括號需要分別修改為()和{}
    a_list = [n for n in range(1, 10) if n % 2 == 0]
    print(a_list) $ -> [2, 4, 6, 8]
  - 字典推導式格式:{ key_expression : value_expression for expression in iterable }
    a_list = [n for n in range(1, 5)]
    b_list = ["a", "b", "c", "d"]
    c_dict = {k: b_list[k - 1] for k in a_list}
    print(c_dict) # -> {1: ‘a‘, 2: ‘b‘, 3: ‘c‘, 4: ‘d‘}


本文參考書籍:[美]Bill Lubanovic 《Python語言及其應用》

Python容器--list, tuple, dict, set