標籤:upd closed 賦值運算 type abc rate 一個 diff nbsp
1.在列表和字典的迴圈中,不能直接刪除它們
刪除第1、3位的元素 lis = [11,22,33,44,55]
#方法1‘‘‘lis = [11,22,33,44,55]li = []for i in range(len(lis)): if i % 2 == 0: li.append(lis[i])lis = liprint(li)‘‘‘#方法2lis = [11,22,33,44,55]tu = tuple(lis)for i in range(len(lis)): if i % 2 == 1: lis.remove(tu[i])print(lis)
刪除字典dic = {‘k1‘:‘v1‘,‘k2‘:‘v2‘,‘a3‘:‘v3‘}中相應的索引值對
# dic1 = {}dic = {‘k1‘:‘v1‘,‘k2‘:‘v2‘,‘a3‘:‘v3‘}# for i in dic:# if ‘k‘ not in i:# dic1.setdefault(i,dic[i])# dic = dic1# print(dic)# l = []# for i in dic:# if ‘k‘ in i:# l.append(i)# for i in l:# del dic[i]# print(dic)
元組
tu1 = (1) int
tu2 = (1,) tuple
2.集合
集合是可變的,它裡面的元素不可變,集合是無序的且不重複的
集合有增加、刪除、查詢、交並差等操作
1.增加
.add() / .update()
# set1 = set({1,2,3})# set2 = {1,2,3,[3,4],{‘name‘:‘alwx‘}} #錯的# print(set1,set2)set1 = {‘alex‘,‘wusir‘,‘ritian‘,‘egon‘,‘barry‘,‘barrry‘}#add 加一個元素set1.add(‘女生‘)print(set1)#update 迭代添加set1.update(‘abc‘)print(set1)
2.刪除
.pop() / .remove() / del /.clear()
# #刪除 pop# print(set1.pop()) #隨機刪除,有傳回值# print(set1)## #按元素刪除 remove# set1.remove(‘alex‘)# print(set1)#清空集合# set1.clear()# print(set1)#del 刪除整個集合# del set1# print(set1)
3.沒有改,查只能按照for迴圈來查,因為集合是無序的
for i in set1: print(i)
4.交集,並集,反交集,差集,子集,超集
&, .intersection()
| , .union()
^ , .symmetric_difference()
set1 - set2 , .difference()
set1 < set2 返回bool值,就是比較集合的內含項目關聯性
#特殊之處 可以求交並差集#交集set1 = {1,2,3,4,5}set2 = {4,5,6,7,8}print(set1 & set2) #{4,5}print(set1.intersection(set2)) #{4,5}set3 = set1 & set2#並集print(set1 | set2)print(set2.union(set1)).#反交集 除了交集之外的並集print(set1 ^ set2)print(set1.symmetric_difference(set2))#差集print(set1 - set2) #set1專屬的print(set1.difference(set2))#子集與超集 比較內含項目關聯性,返回bool值set1 = {1,2,3}set2 = {1,2,3,4,5}print(set1 < set2)print(set1.issubset(set2))View Code
5.例題 去除列表中的重複元素
li = [1,2,33,33,2,1,4,5,6,6]set1 = set(li)print(set1)li = list(set1)print(li)
集合可以凍結,變成不可變資料類型
#set 本身是可變的,內部元素不可變,將set凍結s = frozenset(‘barry‘) #變成不可變資料類型,唯讀,無序print(s,type(s))for i in s: print(i)
6.深淺copy
賦值運算後,兩個變數指向同一個記憶體位址,改變一個會引起另外一個的改變
copy運算後,兩個變數記憶體位址不相同,改變 一個不會引起另外一個的改變
l1 = [1,2,3]l2 = l1l1.append(‘a‘)print(l1,l2)#copyl1 = [1,2,3]l2 = l1.copy()print(l1,l2)print(id(l1),id(l2))l2.append(‘a‘)print(l1,l2)[1, 2, 3, ‘a‘] [1, 2, 3, ‘a‘][1, 2, 3] [1, 2, 3]1921628470728 1921628348040[1, 2, 3] [1, 2, 3, ‘a‘]
copy運算後,裡面 列表 的記憶體位址不變
l1 = [1,2,[4,5,6],3]l2 = l1.copy()print(l1,id(l1))print(l2,id(l2))l1.append(‘a‘)print(l1,l2)l1[2].append(‘a‘)print(l1,l2)print(id(l1[2]))print(id(l2[2]))###################[1, 2, [4, 5, 6], 3] 1921627608072[1, 2, [4, 5, 6], 3] 1921628470728[1, 2, [4, 5, 6], 3, ‘a‘] [1, 2, [4, 5, 6], 3][1, 2, [4, 5, 6, ‘a‘], 3, ‘a‘] [1, 2, [4, 5, 6, ‘a‘], 3]19216284708561921628470856
深度copy 列表的記憶體位址改變了,兩個列表不相互影響
但是 l2 = l1[:] 賦值運算會導致兩個列表的記憶體位址不一樣,但是值卻會相互影響而改變
import copyl1 = [1,2,[4,5,6],3]l2 = copy.deepcopy(l1)print(l1,id(l1))print(l2,id(l2))l1[2].append(‘a‘)print(l1,l2)l1 = [1,[1],2,3,4]l2 = l1[:] **********************l1[1].append(‘a‘)print(l1,id(l1))print(l2,id(l2))print(l1[1] is l2[1])#########################[1, 2, [4, 5, 6], 3] 1921630006344[1, 2, [4, 5, 6], 3] 1921627608072[1, 2, [4, 5, 6, ‘a‘], 3] [1, 2, [4, 5, 6], 3][1, [1, ‘a‘], 2, 3, 4] 1921628470856[1, [1, ‘a‘], 2, 3, 4] 1921630006344True
迴圈輸出資料行表元素和它的序號
li = [‘alex‘,‘taibai‘,‘wusir‘,‘egon‘]for i in li: print(li.index(i) + 1,i)for index,i in enumerate(li,1): print(index,i)
python學習7