#1、set集合
set是一個無序且不重複的元素集合。
- 不重複(可去重)
- 元素為不可變對象
- 集合内部隻能存放不可變的類型,數字、字元串、元組
- 集合本身是無序的,不可以為集合建立索引或執行切片(slice)操作,也沒有鍵(keys)可用來擷取集合中元素的值
set的建立和空集合
s=set()
- 添加
se.add(1)
- discard()-移除不存的元素不會報錯
- remove()-移除不存的元素會報錯
- pop()-移除末尾元素
- intersection() -取交集
賦給新值 se = {11, 22, 33} be = {22, 55} temp1 = se.intersection(be) #取交集,賦給新值 print(temp1) # 22 print(se) # {11, 22, 33} temp2 = se.intersection_update(be) #取交集并更新自己 print(temp2) # None print(se) # 22
- 判斷(isdisjoint()交集、issubset()子集、issuperset()父集)
se = {11, 22, 33} be = {22} print(se.isdisjoint(be)) #False,判斷是否不存在交集(有交集False,無交集True) print(se.issubset(be)) #False,判斷se是否是be的子集合 print(se.issuperset(be)) #True,判斷se是否是be的父集合
- 合并(se和be的并集 減去 se和be的交集)
se = {11, 22, 33} be = {22,55} temp1 = se.symmetric_difference(be) # 合并不同項,并賦新值 print(temp1) #{33, 11, 55} print(se) #{33, 11, 22} temp2 = se.symmetric_difference_update(be) # 合并不同項,并更新自己 print(temp2) #None print(se) #{33, 11, 55}
- 取并集(union)
合并且更新se = {11, 22, 33} be = {22,44,55} temp=se.union(be) #取并集,并賦新值 print(se) #{33, 11, 22} print(temp) #{33, 22, 55, 11, 44}
se = {11, 22, 33} be = {22,44,55} se.update(be) # 把se和be合并,得出的值覆寫se print(se) se.update([66, 77]) # 可增加疊代項 print(se)
- 類型轉化
se = set(range(4)) #set ->list li = list(se) #set ->tuple tu = tuple(se) #set ->str st = str(se)
#2、List
- 清單的資料項不需要具有相同的類型
- 清單可以完成大多數集合類的資料結構實作。它支援字元,數字,字元串甚至可以包含清單
- 加号 + 是清單連接配接運算符,星号 * 是重複操作。
- 統計(count())
fruits = ['orange', 'apple', 'pear', 'banana'] print (fruits.count('apple'))
- 判斷是否存在(index()、in)
print (fruits.index('apple')) #如果沒有找到會異常 print ('apple' in fruits) 從第三個位置開始尋找 print (fruits.index('apple',3)) #會報錯的方法不推薦使用,通常使用in
- 反轉(reverse())
fruits.reverse()
- 排序(sort())
fruits.sort()
- 增加元素(append()、extend())
fruits.append('kiwi') # 增加集合 fruits.extend(['kiwi','water'])
- 合并兩個清單
new_fruits=fruits+['kiwi','water']
- 插入元素(insert())
fruits.insert(0,'pick');
- 删除元素(remove()、del、分片)
fruits.remove('apple') fruits.remove(fruits[2]) del fruits[1] # 删除單個元素 fruits[1:2]=[] # 删除多個元素 fruits[2:4]=[]
- 删除聊表末尾的元素(pop())
fruits.pop() fruits.pop(index) #删除指定位置的元素
- 替換元素(分片)
fruits[0:3]=['橙子','蘋果','梨']
- 拷貝(分片、copy())
ff=fruits[:] fff=fruits.copy()
- 清空元素(clear()、del、分片)
fruits.clear() del fruits[:] #不同于del fruits fruits[ : ]=[]
- 最大最小值(max()、min())
print(max(fruits)) print(min(fruits))
- 多元數組
list01=[1,3,[5,7,9,11]]
- 淺拷貝(清單内元素位址發生改變,用id()檢視,二維數組内位址不會改變)
list02=list01.copy() list03=list01[:]
- 深拷貝(清單内元素位址完全改變,包括二維數組位址)
import copy list02=copy.deepcopy(list01)
- 淺拷貝(清單内元素位址發生改變,用id()檢視,二維數組内位址不會改變)
- 類型轉化
#list -> str list01 = ['I','love','python'] list_str = str(list01) #方式一 ['I', 'love', 'python'] list_str01 = ''.join(list01) #方式二 Ilovepython #list -> set list02 = set(list01) #list -> tuple list03 = tuple(list01)
- list去重
方法一:建立新數組
list01 = [1,2,2,3,6,7,8,9]
list02 = []
for i in list01:
if i not in list02:
list02.append(i)
print(list02)
方法二:
list01=[1,2,2,2,3,4,2,5,4,2]
le=len(list01)
i=0
while i<le-1:
j=i+1
while j<le:
if list01[i]==list01[j]:
list01.remove(list01[i])
le-=1
i-=1
break
j+=1
i+=1
print(list01)
方法三:(删除後面所有與目前元素相同的元素)
list01=[1,2,2,2,3,4,2,5,4,2]
le=len(list01)
i=0
while i<le-1:
j=i+1
while j<le:
if list01[i]==list01[j]:
list01.pop(j)
le-=1
j-=1
j+=1
i+=1
print(list01)
#3、Tuple
- 和字元串一樣,tuple一旦建立就不能改變
- 任意無符号的對象,以逗号隔開,預設為元組
- 建立
s=() #空元組
- 通路(分片)
t2=(10,20,30,40) print(t2[0:2])
- 修改
修改元組是非法的
- 删除(del)
del t2 元組中的元素值是不允許删除的,但我們可以使用del語句來删除整個元組
- 元組運算符
與字元串一樣,元組之間可以使用 + 号和 * 号進行運算。這就意味着他們可以組合和複制,運算後會生成一個新的元組 Python表達式 結果 描述 len((1, 2, 3)) 3 計算元素個數 (1, 2, 3) + (4, 5, 6) (1, 2, 3, 4, 5, 6) 連接配接 ('Hi!',) * 4 ('Hi!', 'Hi!', 'Hi!', 'Hi!') 複制 3 in (1, 2, 3) True 元素是否存在 for x in (1, 2, 3): print (x,) 1 2 3 疊代
- 類型轉換
list01 = ('I', 'love', 'python') print(type(list01)) # tuple -> str list02 =str(list01) print(list02) print(type(list02)) # tuple -> set list03 = set(list01) print(list03) print(type(list03)) # tuple -> list list03 = list(list01) print(list03) print(type(list03))
- 和list比較
②、Tuple 不存在的方法定義 tuple 與定義 list 的方式相同, 除了整個元素集是用小括号包圍的而不是方括号。 Tuple 的元素與 list 一樣按定義的次序進行排序。 Tuples 的索引與 list 一樣從 0 開始, 是以一個非空 tuple 的第一個元素總是 t[0]。 負數索引與 list 一樣從 tuple 的尾部開始計數。 與 list 一樣分片 (slice) 也可以使用。注意當分割一個 list 時, 會得到一個新的 list ;當分割一個 tuple 時, 會得到一個新的 tuple。
③、用 Tuple 的好處您不能向 tuple 增加元素。Tuple 沒有 append 或 extend 方法。 您不能從 tuple 删除元素。Tuple 沒有 remove 或 pop 方法。 然而, 您可以使用 in 來檢視一個元素是否存在于 tuple 中。
④、Tuple 與 list 的轉換Tuple 比 list 操作速度快。如果您定義了一個值的常量集,并且唯一要用它做的是不斷地周遊它,請使用 tuple 代替 list。 如果對不需要修改的資料進行 “寫保護”,可以使代碼更安全。 使用 tuple 而不是 list 如同擁有一個隐含的 assert 語句,說明這一資料是常量。 如果必須要改變這些值,則需要執行 tuple 到 list 的轉換。
Tuple 可以轉換成 list,反之亦然。内置的 tuple 函數接收一個 list,并傳回一個有着相同元素的 tuple。 而 list 函數接收一個 tuple 傳回一個 list。從效果上看,tuple 當機一個 list,而 list 解凍一個 tuple。
- 建立
#4、dictionary
- 典的每個鍵值 key=>value 對用冒号 : 分割,每個鍵值對之間用逗号 , 分割,整個字典包括在花括号 {} 中
- 鍵一般是唯一的,如果重複最後的一個鍵值對會替換前面的,值不需要唯一。(可用鍵值去重)
- 和list和tuple一樣,dictionary也可以:
char={item:ord(item) for item in 'python'} print(char) #{'p': 112, 'y': 121, 't': 116, 'h': 104, 'o': 111, 'n': 110}
- 通路
如果想根據key的先後順序周遊字典,則可以:user={ 'name':{'firstName':'zhan','lastName':'liang'}, 'age':20, 'address':'usa', 'hobby':['film','sport'] } print('user length:',len(user)) print('user first property is :',user['name']) for key,value in user.items(): print ('property %s value %s' % (key,value)) for kk in user.keys(): print ('property %s' % (kk)) for vv in user.values(): print ('values %s' % (vv))
for kk in sorted(user.keys()): print ('property %s' % (kk))
- 針對不存在的鍵,如果通路會出現錯誤。
可以用get()避免nation=user['nation'] #error #nation=user['nation'] if 'nation' in user else 'china'
nation=user.get('nation') setdefault('key',default)如果字典中包含有給定鍵,則傳回該鍵對應的值,否則傳回為該鍵設定的值 print(user.setdefault('ages',30))
- 删除元素(pop()、popitem()、clear())
pop(key) 根據key删除元素 res=user.pop('hobby') popitem() 删除最後一個元素 clear() 清空字典
- 合并字典
user.update(myuser) 把myuser合并到user中
- fromkeys()(把list變成keys)
seq = ['Google', 'Runoob', 'Taobao'] dict = dict.fromkeys(seq) dict = dict.fromkeys(seq, 10) print("新字典為 : %s" % str(dict))
- enumerate函數(把list變成value )
Python内置的enumerate函數可以把一個list變成索引-元素對,這樣就可以在for循環中同時疊代索引和元素本身: mylist=['A', 'B', 'C'] print(dict(enumerate(mylist))) for i, value in enumerate(mylist): print(i,value)
- dict,string之間的互相轉化
s='{"id":"001","name":"python"}' # string to dict s_dict=eval(s) print(s_dict['id']) # dict to string s_string=str(s_dict) print(s_string)
- 通路