元祖
对于元祖 如果一个元祖只有一个元素的时候,在元祖里面要加逗号,如果不加 此元素是什么数据类型该表达式就是这么数据类型
tu = (9) tu 的数据类型为int
tu = (9,) tu的数据类型为tuple
tu([2,3,4]) tu的数据类型为list
列表
在循环一个列表时,最好不要进行删除的动作(一旦删除,索引会随之改变),容易出错。 # li = [11,22,33,44,55] # 将索引为奇数的元素删除。 # del li[1::2] 方法一 # print(li) # l1 = [] # for i in range(len(li)): # if i % 2 == 0: 方法二 # l1.append(li[i]) # li = l1 # print(li) l1 = [] # for i in li: # if li.index(i) % 2 == 0: # l1.append(i) # li = l1 # print(li) 方法三
上面的方法都有一个共性就是把满足要求的元素找出来 放在一个新的列表中 然后再打印新列表
字典
dic = {} dic = dic.fromkeys('abc',[]) print(dic) dic = dic.fromkeys('abc','alex') print(dic) #{'a': [], 'b': [], 'c': []} #{'a': 'alex', 'b': 'alex', 'c': 'alex'}
dic = {'k1':'value1','k2':'value2','name':'wusir'} # 将字典中含有k元素的键,对应的键值对删除。 # 在循环字典中,不能增加或者删除此字典的键值对。 # dictionary changed size during iteration l1 = [] for i in dic: if 'k' in i: l1.append(i) for i in l1: del dic[i] print(dic) 重点就是创建空列表把符合要求的key放到空列表中 然后循环列表 通过列表的元素去找字典中的key value
数据转换
tuple 转化为list
list = [0,12,3,4] tu = (0,12,3,4) tu = print(tuple(list)) list = print(list(tu)) #(0,12,3,4) #[0,12,3,4]
tuple 转为为str
转化条件和list一样的 要求所有的元素都为字符串 tuple = ('1','2','3') s = '*'.join(tuple) print(s) #1*2*3
集合 不重复,无序,它里面的元素是可哈希的。他本是是不可哈希,他不能作为字典的key。
集合自带去重功能 如果一个列表或者元祖中有重复的元素 如果元素全是int 那么是有序排列的 从小到大 list = [2,3,4,4,5] print(set(list)) tuple = (2,3,4,4,5) print(set(tuple)) #{2, 3, 4, 5} #{2, 3, 4, 5}
增
集合的增 add se = {2,3,5,4} se.add('a') print(se) #{2,3,'a',5,45} update 增加的元素必须为可迭代对象 数字不能迭代 se.uppdate('abc') print(se) #{'b', 2, 3, 5, 'a', 'c', 45}
删
se = {'b', 2, 3, 5, 'a', 'c', 45} se.pop() print(se) 随机删除集合中的某一个元素 如果集合中的元素全是int那么就是删除最后一个 se.clear() 删除集合中的所有元素 print(se) #se() del se 删除集合 print 会报错
改
set1 = {2,3,4,5,6} set2 = {9,3,4,5,7} print(set1 & set2) 交集 print(set1 | set2) 并集 print(set1 ^ set2) 反交集 print(set1 - set2) 差集 print(set2 - set1) 差集
set1 = {3,4,5,} set2 = {9,3,4,5,7} print(set1.issubset(set2)) 判断set1是否为set2的子集 同为 print(set1<set2) print(set2.isdisjoint(set1)) 判断两个集合的交集是否为空 print(set2.issuperset(set1)) 判断set2是否为set1的超集 同为 print(set2>set1) #True #False #True
set1 = {3,4,5,} set2 = {9,3,4,5,7} set3 = frozenset(set1) print(type(set3)) <class 'frozenset'> 改变可数据类型 变成frozenset数据类型 该数据类型特征为不能更改 为可哈西类型 可哈类型可以作为字典的key
copy
赋值运算
l1 = [1,2,3] l2 = l1 l2.append(111) print(l1,l2) print(id(l1)) print(id(l2)) #[1, 2, 3, 111] [1, 2, 3, 111] #1861092202312 #1861092202312 对于赋值运算 不管是什么数据类型他的内存地址是一样的 所以要改都改
copy的浅copy
#copy 不是指向一个,在内存中开辟了一个内存空间 #对于浅copy来说,第一层创建的是新的内存地址, # 而从第二层开始,指向的都是同一个内存地址, # 所以,对于第二层以及更深的层数来说,保持一致性。 l1 = [1,2,3] l2 = l1.copy() print(id(l1),id(l2)) #2123185674056 2123184810312 l1 = [1,2,3,[3,4,5]] l2 = l1.copy() l1[1] = "x" l1[3].append(7) print(l1,l2) print(id(l1[3]),id(l2[3])) #[1, 'x', 3, [3, 4, 5, 7]] [1, 2, 3, [3, 4, 5, 7]] 第一层创建的是新内存所以不跟随改变 第二层以后都是统一内 存地址 所以都会发生改变 # 2909381154632 2909381154632 第二层的内存地址相同
copy的深copy
deep.copy 对于深copy来说,两个是完全独立的, 改变任意一个的任何元素(无论多少层),另一个绝对不改变. import copy l1 = [1,2,3,[3,4,5]] l2 = copy.deepcopy(l1) print(l2) print(id(l1[3]),id(l2[3])) #[1, 2, 3, [3, 4, 5]] #2442720707976 2442720709384 内存地址不一样