元祖的特性:是一個只讀列表、可以迴圈、可以切片,修改數據遵循'兒子'不能改但'孫子'可能可以改。 iterable:可迭代對象(元祖、列表、字串、集合) 元祖宣告方式: 元祖索引切片: 查: tu.index(): 通過元素找索引,可以切片,找到該元素則返回第一個元素索引值,找不到則報錯 tu.co ...
元祖的特性:是一個只讀列表、可以迴圈、可以切片,修改數據遵循'兒子'不能改但'孫子'可能可以改。
iterable:可迭代對象(元祖、列表、字串、集合)
元祖宣告方式:
tu = (1,2,3,['a','b',1],'str') #(1, 2, 3, ['a', 'b', 1], 'str')
元祖索引切片:
tu = (1,2,3,['a','b',1],'str') #(1, 2, 3, ['a', 'b', 1], 'str') print(tu[1]) #2 print(tu[-2]) #['a', 'b', 1] print(tu[1:3]) #(2, 3) print(tu[-1:2:-1]) #('str', ['a', 'b', 1]) print(tu[::1]) #(1, 2, 3, ['a', 'b', 1], 'str') print(tu[::-2]) #('str', 3, 1)
查:
for i in tu: print(i) #1 #2 #3 #['a', 'b', 1] #str
tu.index():
通過元素找索引,可以切片,找到該元素則返回第一個元素索引值,找不到則報錯
print(tu[::-2].index(3)) #1 print(tu.index(['a','b',1])) #3
tu.count():
tu = (1,2,3,['a','b',1],'str',2,2) print(tu.count(2)) #3
len(tu):
tu = (1,2,3,['a','b',1],'str',2,2) print(len(tu)) #7
改:
因為元祖為只讀列表裡面的數據不能改動,但是其子元素內部的元素可能可以改動。
tu =((1,2,'a'),['a','b',1],'a',1,{1,2})
tu[0][2] = 'z' print(tu) #'tuple' object does not support item assignment tu[1][2] = 'z' print(tu) #((1, 2, 'a'), ['a', 'b', 'z'], 'a', 1, {1, 2}) tu[2] = 'z' print(tu) #'tuple' object does not support item assignment tu[3] = 1 print(tu) #'tuple' object does not support item assignment tu[4][0]= 5 print(tu) #'set' object does not support item assignment
集合的特性:集合本身是一個可變的數據類型,但其中的元素是不可變的數據類型。它也有著無序、不重覆的特點。
把一個列表轉成集合就可以做到去重覆的效果。
集合宣告方式:
當創建一個空集合時要用set(),不能用{ }
a = set() #set() b = set({1,'a',False,'a'}) #{False, 1, 'a'} c = {1,2,'a','c','c'} #{1, 2, 'c', 'a'}
增:
set.add():
將元素無序的添加至集合中,若該元素已存在則不進行任何操作
a = set({1,2,3,'a',(1,2)}) a.add(1) print(a) #{(1, 2), 1, 2, 3, 'a'} a.add('ab') print(a) #{(1, 2), 1, 2, 3, 'ab', 'a'}
set.update():
將元素迭代並無序加入以逗號隔開
a = set({1,2,3,'a',(1,2)}) a.update('abc') #{(1, 2), 1, 2, 3, 'b', 'c', 'a'} a.update({'key1' : 12,'key2' : 'c','key3' : 0}) #{(1, 2), 1, 2, 3, 'key2', 'key3', 'key1', 'a'} a.update([6,5]) #{(1, 2), 1, 2, 3, 5, 6, 'a'} a.update((1,9,'a')) #{(1, 2), 1, 2, 3, 9, 'a'} a.update(set({5,6})) #{(1, 2), 1, 2, 3, 5, 6, 'a'}
刪:
set.pop():
隨機刪除集合中的一個元素,並返回結果
a = set({1,2,3,'a',(1,2)}) print(a.pop()) #(1, 2) b = set() print(b.pop()) #'pop from an empty set'
set.remove():
在集合中刪除一個元素,如果元素不存在則返回錯誤
a = set({1,2,3,'a',(1,2)}) a.remove(1) print(a) #{(1, 2), 2, 3, 'a'} a.remove(1) print(a) #KeyError: 1
set.clear():
清空整個集合
a = set({1,2,3,'a',(1,2)}) a.clear() print(a) #set()
del:
刪除該集合
a = set({1,2,3,'a',(1,2)}) del a print(a) #name 'a' is not defined
set.discard():
移除集合中的某個元素,若果元素不存在則不會報錯
a = set((1,'a',5)) a.discard(1) #{5, 'a'} print(a) b = set(((1,'a',5),2)) b.discard(1) #{2, (1, 'a', 5)} print(b)
改:
因為集合內部為不可變數據類型所以無法修改其中的元素。
查:
a = {1,2,'a',False,'abc'} for i in a: print(i) #False #1 #2 #abc #a
求交集:
交集定義:集合論中,設A,B是兩個集合,由所有屬於集合A且屬於集合B的元素所組成的集合,叫做集合A與集合B的交集(intersection),記作A∩B。
a = {1,2,3,4} b = {2,4,5,6} print(a & b) #{2, 4} print(a.intersection(b)) #{2, 4}
求並集:
並集定義:給定兩個集合A,B,把他們所有的元素合併在一起組成的集合,叫做集合A與集合B的並集,記作A∪B。
a = {1,2,3,4} b = {2,4,5,6} print(a | b) #{1, 2, 3, 4, 5, 6} print(a.union(b)) #{1, 2, 3, 4, 5, 6}
求反交集:
a = {1,2,3,4} b = {2,4,5,6} print(a ^ b) #{1, 3, 5, 6} print(a.symmetric_difference(b)) #{1, 3, 5, 6}
求差集:
就是找前面一個集合獨有的
a = {1,2,3,4} b = {2,4,5,6} print(a - b) #{1, 3} print(a.difference(b)) #{1, 3} print(b - a) #{5, 6} print(b.difference(a)) #{5, 6}
判斷是否為子集:
若原集合中的所有元素都包含在指定集合中,返回True,否則返回False
a = {1,2,3} b = {'a',1,2,3,4,5,6} print(a < b) #True print(a.issubset(b)) #True
判斷是否為超集:
判斷指定集合中的元素是否包含在原集合中,有則返回True,否則返回False
a = {1,2,3} b = {'a',1,2,3,4,5,6} print(b > a) #True print(b.issuperset(a)) #True
其他:
1.將列表中的元素去重覆成一個新的列表(不考慮演算法)
a = [1,2,2,33,33,5,6,7,'a','b','a'] a = list(set(a)) print(a) #[1, 2, 33, 'b', 5, 6, 7, 'a']
2.將set()轉變為不可變數據類型
a = set({1,2,'a'}) b = {5,7,a} print(b) #unhashable type: 'set'
a = set({1,2,'a'}) a = frozenset(a) print(a,type(a)) #frozenset({1, 2, 'a'}) <class 'frozenset'> b = {a,4,5} print(b) #{4, 5, frozenset({1, 2, 'a'})}
3.什麼元素轉化為布爾值為False?
0、[]、()、{}、set()、' '
4.數字和元祖
tu1 = ((100)) tu2 = ((100,)) print(tu1,type(tu1)) #100 <class 'int'> print(tu2,type(tu2)) #(100,) <class 'tuple'>
元祖裡面只有一個元素且不加逗號,那麼此元素是什麼類型就是什麼類型
5.當for迴圈刪除列表中元素時都會產生一個新的列表
li = [1,2,3,4,5,6] for i in range(len(li)): del li[i] print(li) #第一次刪除 i = 0,對應索引值 li[i] = 1,刪除後列表 li = [2, 3, 4, 5, 6] #第二次刪除 i = 1,對應索引值 li[i] = 3,刪除後列表 li = [2, 4, 5, 6] #第三次刪除 i = 2,對應索引值 li[i] = 5,刪除後列表 li = [2, 4, 6] #第四次刪除 i = 3,報錯 因為到這時候列表的長度是3,小於元素的索引值
將奇數位的數刪除:
方法一
li = [1,2,3,4,5,6] li = li[::2] print(li)
方法二
li = [1,2,3,4,5,6] l1 = [] for i in li: if li.index(i) % 2 == 0: l1.append(i) li = l1 print(li) #[1, 3, 5]
6.在遍歷一個字典時,不能刪除它的鍵值對
若要刪除字典中含'k'的元素:
dic = {'key1' : 2, 'key2' : 3, 'key3' : 'a', 'aey4' : 5} for i in dic: if 'k' in i: del dic[i] #RuntimeError: dictionary changed size during iteration
解決方案:
方法一:
dic1 = {} for i in dic: if 'k' not in i: dic1.setdefault(i,dic[i]) dic = dic1 print(dic) #{'aey4': 5}
方法二:
l = [] for i in dic: if 'k' in i: l.append(i) for i in l: del dic[i] print(dic) #{'aey4': 5}