1. 程式人生 > >python之列表、元組

python之列表、元組

 


Day 2

 

  • 建立列表
    • 建立列表和建立普通變數一樣,用中括號括起一堆資料即可(這裡的資料可以是整型、字串、浮點型...甚至可以包含另一個列表),資料間用逗號隔開。
      • eg:number=[1,2,3,4,5]
      •    mix=[1,"maggie",3.14,[1,2,3]]
    • 如果暫時不知道忘列表里加什麼資料時,可先建立一個空列表
      • eg:empty=[]
  • 向列表新增元素
    • 在列表尾新增單個元素append()  append()不是一個BIF,它屬於列表物件的一個方法
      • eg:number=[1,2,3,4,5]
          number.append(6)
            print(number)
        執行結果:[1,2,3,4,5,6]
    • 在列表尾新增多個元素extend()  用一個列表來擴充套件另一個列表,即它的引數應該是一個列表
      • eg:number=[1,2,3,4,5]
           number.extend([7,8])
           print(number)  
        執行結果:[1,2,3,4,5,7,8]
    • 在列表任意位置插入元素insert()  兩個引數,第一個引數代表在列表中的位置,第二個引數是在該位置插入一個元素
      • eg:number=[1,2,3,4,5]
           number.insert(1,0)
           print(number)
        執行結果:[1,0,2,3,4,5]
        該例子為在1後插入0;但因為0習慣用語表示第一個數,即,應該為在0後插入0
      • eg:number=[1,2,3,4,5]
           number.insert(0,0)
           print(number)
        執行結果:[0,1,2,3,4,5]
  • 從列表中獲取元素
    • 和陣列一樣,可通過元素的索引值(index)從列表獲取單個元素(列表索引值從0開始)
    • number=['0','1','2','4','3']
      print(number[3])
      number[3],number[4] = number[4],number[3]#交換位置,前面的位置順序 = 後面的位置順序
      print(number)
      

       執行結果:'4'
                ['0','1','2','3','4']

  • 從列表刪除元素
    • remove() 刪除元素:不需知道要刪除元素在列表中的位置,只需知道它存在於該列表即可(若不存在,則報錯)
    • number=['0','1','2','4','3']
      print(number[3])
      number.remove("4")
      print(number)
      

       執行結果:'4'
                 ['0','1','2','3']

    • del 是一個語句,而不是一個列表的方法,因此不必有()小括號。且,del可指定刪除某個位置的元素;也可直接刪除整個列表(del 列表名)
      number=['0','1','2','4','3']
      print(number[3])
      del number[3]
      print(number)
      

      執行結果:'4'
                 ['0','1','2','3']

    • pop() 方法“彈出”元素:預設彈出列表中最後一個元素;但也可以將索引值作為引數,彈出相應元素
      number=['0','1','2','3','4']
      print(number.pop())
      print(number.pop())
      print(number.pop(0))
      print(number)
      

      執行結果:'4'
                '3'
                 '0'
                 ['1','2']

  • 列表分片(slice)
    • 列表分片是建立在原列表上的一個拷貝(或副本),原列表不會發生改變。
      number=['0','1','2','3','4']
      print(number[0:2])  #['0','1']
      print(number[:2])   #['0','1']
      print(number[1:])    #['1','2','3','4']
      print(number[:])     #['0','1','2','3','4']
      • 格式:開始位置 (冒號): 結束位置 (不包括結束位置的元素)

      • 若沒有開始位置,則預設0
      • 若沒有結束位置,則從開始位置一直到列表末尾的所有元素
      • 若沒有放入任何索引值,只有冒號,則將得到整個列表的拷貝
    • 進階玩法:三個引數(第三個代表步長,預設為1)
      number=[0,1,2,3,4]
      print(number[0:3])    #[0,1,2]
      print(number[0:3:1])  #同上,預設步長為1
      print(number[0:5:2])  #[0,2,4] 步長為2(每兩個取出一個)
      print(number[::2]) #同上 print(number[::-1]) #[4,3,2,1,0] 步長為-1,相當於複製一個翻轉的列表(逆序)
  • 常用的操作符
    • 比較運算子:列表比較大小,從第一個元素開始比較;同理,字串也是從第一個字元對應的ASCII碼值得大小開始比較
      list1=[123]
      list2=[234]
      print(list1>list2) #False
      
      list3=[123,456]
      list4=[234,123]
      print(list3>list4)  #False
    • 連線操作符(+):可將多個列表物件合併在一起(相當於extend()),但不能實現列表新增新元素的操作(用append()或insert())
      list1=[123,456]
      list2=[234,123]
      list3=list1+list2
      print(list3)  #[123,456,234,123]
    • 重複操作符(*)
      list1=[123]
      print(list1*3)  #[123,123,123]
    • 複合賦值運算子
      list1=[123]
      list1*=3
      print(list1)  #[123,123,123]
    • 成員關係操作符(in和not in)----只能判斷一個層次的成員關係,若要判斷列表裡面的列表的元素,則應先進入一層列表
      list1=[123,456,[789]]
      print(123 in list1)		#True
      print(789 in list1)		#False
      print(789 in list1[2])	        #True
      

      可用索引號去訪問列表中的值,那訪問列表中的列表的值,就相當於訪問二維陣列,eg:list1[2][0] 結果為789

  • 列表的方法:print(dir(list))
    • count():計算其引數在列表中出現的次數
    • index():返回其引數在列表中的位置
      • index()還有兩個引數,用於限定查詢範圍。(因此可查詢重複出現的目標的下一個位置)
        # coding=gbk
        list1=[1,1,2,3,5,8,13,21]
        print(list1.count(1))	#2 1出現2次
        print(list1.index(1))	#0 1在0位置(但其實在1位置仍出現,所以再加入引數限定範圍查詢)
        start=list1.index(1)+1	#起始點為0位置+1
        stop=len(list1)			#結束點為整個列表長度處(末尾)
        print(list1.index(1,start,stop))#1 這樣就可以找完所有目標出現的位置
        

          Q:只能返回一個值?所以只能一個個地查詢?而不能將start設為列表開頭,stop設為列表結尾?

    • reverse():將整個列表原地翻轉(逆序)eg:list1.reverse()
    • sort():用指定方式對列表的成員進行排序,預設不需要引數,從小到大排序 eg:list1.sort()
      • 若需要從大到小的排序,則先sort()從小到大,在reverse()翻轉
      • 或者:sort()三個引數:sort(func,key,reverse)
                           func和key引數用於設定排序的演算法和關鍵字,預設是歸併排序;reverse預設為False,要顛倒順序,只需改為list1.sort(reverse=True)
  •  元組:不可改變(像字串一樣)
  •  建立和訪問一個元組:大部分時候用小括號(,逗號才是關鍵!)
    # coding=gbk
    tuple1=(1,2,3,4,5,6)
    print(tuple1)	#(1,2,3,4,5,6)
    print(tuple1[1]) #2 訪問元組1的索引號為1的元素
    print(tuple1[4:]) #(5,6) 分片方式訪問
    
    temp1=(1)
    print(type(temp1))#<class 'int'> type()為返回引數的型別
    temp2=1,2,3
    print(type(temp2))#<class 'tuple'> 沒有小括號,有,逗號,temp還是元組型別,小括號只是起到補充的作用
    temp3=()
    print(type(temp3))#<class 'tuple'> 建立空元組,直接用小括號即可
    temp4=(1,)
    print(type(temp4))#<class 'tuple'> 若要建立的元組中只有一個元素,在後面加上一個,逗號,明確你要的是一個元組
    temp5=1,
    print(type(temp5))#<class 'tuple'>
    

      證明逗號(,)的關鍵作用例子:

    print(8*(8))		#64
    print(8*(8,))		#(8,8,8,8,8,8,8,8)
  • 更新和刪除元組先構造一個新的元組(同字串)
    • 同樣使用分片的方法
      # coding=gbk
      temp=("小雞","小鴨","小豬")
      temp=temp[:2]+("小狗",)+temp[2:]	#不能省略小括號(),也不能省略逗號(,)!
      print(temp)			#("小雞","小鴨","小狗","小豬")
      
      temp=temp[:1]+temp[3:]		#保留第一個和最後一個,間接刪除第二個和第三個
      print(temp)			#("小雞","小豬")

  暫告一段落~明天回家啦啦啦~