# 切片操作會生成一個新的序列(而不是提取原先序列的元素) # 建立空列表 list1 = [] # 或 list1 = list() print(list1) # 列表新增元素 # l.append(x) 相當於l[len(l):] = [x] list1.append("12345") print("append", list1) # l.extend(x) 相當於l[len(l):] = x,x不能是數字 list1.extend("54321") print("extend", list1) # 注:extend()不會把物件視為一個整體,而是把它包含的元素逐個新增到列表中 # l.insert(i, x) 相當於l[i:i] = [x],和append()一樣會把物件視為一個整體 list1.insert(1, "123") print("insert", list1) # 列表刪除元素 # del l[i:j:k] del list1[1] print("del", list1) # l.pop([i]) 相當於 del l[i:i],不給索引預設刪除最後一個,類似出棧 list1.pop(1) print("pop", list1) # l.remove(x) 刪除列表中第一個值為x的元素 list1.remove('4') print("remove", list1) # l.clear() 相當於 del l[:],區別del l是刪除變數,del l[:]是刪除列表的資料使之變成空列表 list1.clear() print("clear", list1) # 列表修改元素 相當於重新賦值 list1[0:5] = ['1', '2', '3', '4', '5'] print(list1) # 列表查詢元素 # l.count(x) 統計元素x出現的次數 print(list1.count('1')) # l.index(x[,start[,end]]) 返回第一個值為x元素的索引,所以index前最好先count一下 print(list1.index('1')) # 列表實現棧和佇列 list3 = list() list3.insert(0, 'a') list3.insert(0, 'b') list3.insert(0, 'c') print("佇列 先進先出", list3.pop()) print("佇列 先進先出", list3.pop()) print("佇列 先進先出", list3.pop()) list4 = [] list4.append('a') list4.append('b') list4.append('c') print("棧 後進先出", list4.pop()) print("棧 後進先出", list4.pop()) print("棧 後進先出", list4.pop()) from collections import deque # 更好的棧和佇列實現方式(效率更高) # collecions模組中deque結構體,它被設計成兩端存入和讀取都很快的特殊list List = deque() List.append('a') List.append('b') List.append('c') print("佇列 先進先出", List.popleft()) print("棧 後進先出", List.pop()) print(list(List)) # 建立元組(一旦建立元素不能修改,只能重新賦值或者刪除) tuple1 = () # 或tuple1 = tuple() tuple2 = ('a', 'b') tuple3 = ('a',) # 建立單個元素的元組,必須要加上一個逗號,不加的話會視為一個字串 tuple4 = ('abc') print(tuple1, tuple2, tuple3, tuple4) # 建立字典 dict1 = {} # 或 dict1 = dict() print(dict1) # fromkeys()方法建立dict.fromkeys(list, value=None) list1 = list("12345") dict1 = dict.fromkeys(list1, 60) print(dict1) # 訪問字典 print(dict1['1']) # 透過鍵名訪問字典dicname[keyname] print(dict1.get('7','該鍵不存在')) # dictname.get(key[,defaut]) 鍵不存在時,返回default的值,如果不指定返回None # 刪除字典 # del dict1 # 不真正刪除,後面還會用到 # 對映函式建立 ''' 方式一: demo = dict(str1=value1, str2=value2, str3=value3) 注:字串不能帶引號 方式二: demo = (['one', 1], ['two', 2], ['three', 3]) 注:組合是列表或元組都行 a = dict(demo) 方式三: keys = ['one', 'two', 'three'] 注:鍵只能是字串、元組和數字,不能是列表,列表是可以變的。 values = (1, 2, 3) demo = dict(zip(keys, values)) ''' # 字典操作-增,直接給不存在的key賦值 dict1['new'] = 30 print(dict1) # 字典操作-刪 del dict1['1'] print(dict1) # 字典操作-改 dict1['new'] = 20 print(dict1) # 字典操作-查,基於key來判斷 print('2' in dict1) print('old' in dict1) # keys()用於返回字典中所有的鍵 print(dict1.keys()) # values()用於返回字典中所有的值 print(dict1.values()) # items()用於返回字典中所有的鍵值對 print(dict1.items()) # copy() dict1 = {'one':1, 'two':2, 'three':[1,2,3]} dict2 = dict1.copy() # 重新申請一塊記憶體存放資料 dict1['one'] = 2 # dict1的值改變,不會影響dict2 dict1['three'].pop() # dict1的值為列表的地址,改變該地址對應的資料會影響dict2 print(dict2) # update(),key存在則更新value,不存在則新增新的鍵值對 dict1.update({'one':3, 'four':4}) print(dict1) # pop(key)和popitem() dict1.pop('four') # 刪除指定鍵值對 print(dict1) dict1.popitem() # 後進先出的順序刪除鍵值對 print(dict1) # setdefault(key[,default])如果key存在,則返回value,不存在則插入值為default的鍵值對,並返回default。default預設為None dict1.setdefault('three') print(dict1) # 使用字典格式化字串 dict2 = {'小明':60, '小李':80, '小王':99} print(dict2) print('小明的成績:%(小明)s 小李的成績:%(小李)s' % dict2) # %後面,把鍵透過圓括號括起來,再%後面跟字典名 # 建立集合(唯一性,無序性) set1 = {1, 'c', 1, (1,2,3), 'c'} set2 = set("abcddaf") # 建立空集合需要使用set(),使用{}會認為是空字典 print(set1, set2) # 訪問集合(集合是無序的,無法使用下標訪問,最常用的方法就是迴圈結構訪問) for a in set1: print(a, end=' ') print() # 刪除集合 # del(set1) #集合操作-增,只能新增不可變資料,不支援新增列表、字典這類可變資料 set1.add(2) print(set1) #集合操作-刪 set1.remove(2) # 也可以使用discard(),用法與remove()完全相同,唯一區別是刪除失敗時,不丟擲異常 print(set1) # 交集,並集,差集 print("交集:", set1 & set2) print("並集:", set1 | set2) print("差集:", set1 - set2) # 取一個集合中,另一個集合沒有的元素 print("對稱差集:", set1 ^ set2) # 取集合A和B中不屬於A&B的元素 # frozenset集合(set集合的不可變版本) # set 集合中所有能改變集合本身的方法,比如 remove()、discard()、add() 等,frozenset 都不支援;set 集合中不改變集合本身的方法,fronzenset都支援。