1. 程式人生 > >python學習筆記5:列表-元組-集合-字典

python學習筆記5:列表-元組-集合-字典

list列表

  • 一組有順序的資料的組合,可進行增刪改查
  • 賦值操作

    • ls = list() ,ls = []
    • 下標從0開始,最後一個數可使用-1訪問,依次類推
    • 可使用其切片操作[:],反序排列[::-1]
    • 進行切片和copy()後的新list的ID原id不一致,其他方法:
    • 賦值\append\del\等id和原list一致
    • 賦值操作是傳址,copy是傳值

      • 常用函式 del ls[2]:刪除,
      • 可以將列表乘一個整數,表示多個列表連結在一起

        a = ['a',2,3,4,5]
        b= 2
        c = a *b
        print(c)
        #輸入結果如下
        ['a', 2, 3, 4, 5, 'a', 2, 3, 4, 5]
      • 雙層列表迴圈和dict 用法一致,要求每個列表只有兩個值:for k,v in ls:
      • 列表內涵:快速建立列表
      a = [x for x in range(1,35)] #生成從1到34的一個列表
      # 把a中所有偶數生成一個新的列表 b
      b = [m for m in a if m % 2 == 0]
      print(b)
      #..
      c = [  m+n for m in a for n in b if m+n < 250]
      print(c)
      • 通用函式:len,min,max,其他型別也通用的函式
      • append:在末尾新增,insert(index,data):在index前面
        插入
      • pop()彈出最後一個,返回值的彈出的資料.
      • remove:在列表中刪除指定的值的第一個元素
      • clear:清空列表,id 不變
      • reverse():反轉
      • extend 擴充套件列表 a =[1] b=[2] a.extend(b) a== [1,2]
      • count():統計某個資料出現的次數
      • copy屬於淺拷貝,即只是拷貝一層
# 深拷貝跟淺拷貝的區別
# 出現下列問題的原因是,copy函式是個淺拷貝函式,即只拷貝一層內容
# 深拷貝需要使用特定工具
a = [1,2,3, [10, 20, 30]]
b = a.copy()
print(id(a))
print(id(b))
print(id(a[3]))
print(id(b[3]))
a[3][2] = 666
print(a)
print(b)
#輸出結果如下:
140249408365768
140249409236040
#a[3] 和b[3] id一致,說明還是指向同一地址
140249409236232
140249409236232
[1, 2, 3, [10, 20, 666]]
[1, 2, 3, [10, 20, 666]]

元組-tuple

  • 元組可看成是不可更改的list
  • 特性:
    • 是序列表,有序
    • 元組資料值可以訪問,不能修改,不能修改,不能修改,指的是內容不可修改,參考下例
    • 元組資料可以是任意型別
    • list所有特性,除了可修改外,元組都具有
    • 也就是說,list具有的一些操作,比如索引,分片,序列相加,相乘,成員資格操作等,一模一樣
      # 元組相加
      t1 = (1,2,3)
      t2 = (5,6,7)
      # 傳址操作
      print(t1)
      print(id(t1))
      t1 = t1 + t2
      print(t1)
      print(id(t1))
      # tuple 的不可修改,指的是內容的不可修改
      # 修改tuple內容會導致報錯
      t1[1] = 100
      #元組相乘
      t2 =t2 *2

集合 -set

  • 集合是高中數學中的一個概念
  • 一堆確定的無序唯一的資料,集合中每一個數據成為一個元素
  • 特性:
    • 集合內資料無序,即無法使用索引和分片
    • 集合內部資料元素具有唯一性,可以用來排除重複資料
    • 集合內的資料,str, int, float, tuple,冰凍集合等,即內部只能放置可雜湊資料

集合的內涵

  • 如果定義時有重複資料則自動過濾重複資料
    • s = {3,1,2,3,4,3,2,3,1,2,4,3}
    • s == {1,2,3,4}
      # 多迴圈的集合內涵
      s1 = {1,2,3,4}
      s2 = {"i", "am", "stu"}
      s = {m*n for m in s2 for n in s1}
      print(s)
      s = {m*n for m in s2 for n in s1 if n ==2}
      print(s)

集合的函式

  • add(),新增資料
  • copy(),拷貝
  • remove:移除指定的值,直接改變原有值,如果要刪除的值不存在,報錯 : s.remove(1)
  • discard:移除集合中指定的值,跟remove一樣,但是入股要刪除的話,不報錯:s.discard(1)
  • pop 隨機彈出一個元素
  • 集合函式
    # intersection: 交集
    # difference:差集  等於s1 -s2
    # union: 並集
    # issubset: 檢查一個集合是否為另一個子集
    # issuperset: 檢查一個集合是否為另一個超集
    s1 = {1,2,3,4,5,6}
    s2 = {5,6,7,8,9}
    s_1 = s1.intersection(s2)
    print(s_1)
    s_2 = s1.difference(s2)
    print(s_2)
    s_3 = s1.issubset(s2)
    print(s_3)
  • fronzenset:冰凍集合
    • 一種特殊集合:不可以進行任何修改的集合
    • s = frozenset()

字典-dict

  • 字典是沒有順序的組合資料,資料以鍵值對形式出現
  • 建立:
    # 建立有值的字典, 每一組資料用冒號隔開, 每一對鍵值對用逗號隔開
    d = {"one":1, "two":2, "three":3}
    print(d)
    d = dict({"one":1, "two":2, "three":3})
    print(d)
    # 利用關鍵字引數
    d = dict(one=1, two=2, three=3)
    print(d)
    # 
    d = dict( [("one",1), ("two",2), ("three",3)])
    print(d['one'])
  • 特性:
    • 字典是序列型別,但是是無序序列,所以沒有分片和索引
    • 字典中的資料每個都有鍵值對組成,即kv對
    • key: 必須是可雜湊的值,比如int,string,float,tuple, 但是,list,set,dict 不行
    • value: 任何值

字典常用訪問

d = {"one":1, "two":2, "three":3}
# 使用for迴圈,直接按key值訪問
for k in d:
    print(k,  d[k])    
# 上述程式碼可以改寫成如下
for k in d.keys():
    print(k,  d[k])   
# 只訪問字典的值
for v in d.values():
    print(v)    
# 注意以下特殊用法
for k,v in d.items():
    print(k,'--',v)

字典常用函式

  • keys():返回字典的鍵組成的一個結構
  • values():返回字典的值組成的一個結構
  • items():返回字典的鍵值對組成的元組格式
  • get():根據指定鍵返回相應的值, 可以設定預設值
    • d.get('one',100)
  • fromkeys 使用指定的序列作為鍵,使用一個值作為字典的所有的鍵的值
    l = ["eins", "zwei", "drei"]
    # 注意fromkeys兩個引數的型別
    # 注意fromkeys的呼叫主體
    d = dict.fromkeys(l, "hahahahahah")
    print(d)