1、数据类型补充
#str
s='alex'
s1=' '
ret=s1.isspace()
print(ret) #返回True
#tuple
对于元祖:如果只有一个元素,而且没有逗号,此元素是什么数据类型,该表达式就是什么数据类型。
tu=(1)
tu1=(1,)
print(tu,type(tu)) #返回int
print(tu1,type(tu1)) #返回tuple
tu=('老男孩')
tu1=('老男孩',)
print(tu,type(tu)) #返回str
print(tu1,type(tu1)) #返回tuple
tu=([1,2,3])
tu1=([1,2,3],)
print(tu,type(tu)) #返回list
print(tu1,type(tu1)) #返回tuple
#对于list
#再循环一个列表时,最好不要进行删除的动作(一旦删除,索引会随之改变),容易出错
#将索引为奇数的元素删除
li=[11,22,33,44,55] del li[1::2] print(li) li=[11,22,33,44,55] l1=[] for i in range(len(li)): if i%2==0: li.append(li[i]) li=l1 print(li)
li=[11,22,33,44,55] l1=[] for i in li: if li.index(i)%2==0: l1.append(i) li=l1 print(li)
li=[11,22,33,44,55] for i in range(len(li)-1,-1,-1): if i%2==1: del li[i] print(li)
#dict
dic=dict.fromkeys('abc','alex')
print(dic)
dic=dict.fromkeys([1,2,3],[]) print(dic) dic[1].append('老男孩') print(dic)
#将字典中含有K元素的键,对应的键值对删除
dic= {'k1':'value1','k2':'value2','k3':'value3'} l1=[] for i in dic: if 'k' in i: l1.append(i) for i in l1: del dic[i] print(dic)
#再循环字典中,不能增加或者删除此字典的键值对
# dictionary changed size during iteration
#数据转换
#int str bool
#str list split join
#tuple list
tu=(1,2,3)
li=list(tu)
l1=[1,2,3]
tu1=tuple(l1)
print(tu1)
#数据类型转化为bool 为false
0 '' [] () {}
tuple >>str
tu=('wusir','老男孩')
s=' ',join(tu)
print(s)
2、集合
集合:
数据类型:
不重复,无序,他里面的元素是可哈希的。它本身是不可哈希,所以不能作为字典的key
作用:1、去重
2、数据关系的测试
#去重
li= [11,11,22,22,33,33,33] li=list(set(li)) print(li) set={11,22,33,11,22,33} print(set)
set1={'alex','wusir','ritian','barry'}
#增
set1.add('女神')
set1.update('abc') #迭代添加
set1.update([1,2,3]) #迭代添加
print(set1)
#删
set1.remove('alex')
#随机删除
set1 = {'alex','wusir','ritian','egon','barry'} ret = set1.pop() print(ret) print(set1)
set1.clear()
print(set1) #返回 set()
del set1
print(set1) #报错
#查
for i in set1: #遍历
print(i)
set1= {1,2,3,4,5}
set2={4,5,6,7,8}
#交集 & intersection
print(set1 & set2)
print(set1.intersection(set2)) #4,5
#反交集 ^ symmetric_difference
print(set1 ^ set2) #{1,2,3,6,7,8}
print(set1.symmertric_difference(set2)) #{1,2,3,6,7,8}
#并集 | union
print(set1 | set2)
print(set1.union(set2)) #{1,2,3,4,5,6,7,8}
#差集
print(set1 - set2) #{1,2,3}
print(set2 - set1) #{6,7,8}
set1= {1,2,3}
set2={1,2,3,4,5,6}
print(set1.issubset(set2)) #set1是set2的子集
print(set2.issuperset(set1)) #set2是set1的超集
set1={'bayy','wusir'}
#不可变集合
set2=frozenset(set1)
print(set2,type(set2))
2、深浅Copy
li=[1,2,3]
l2=l1
l2.append(111)
print(l1,l2)
#对于赋值运算,指向的是同一个内存地址。字典,列表,集合都一样
#copy不是指向一个,在内存中开辟了一个内存空间
对于浅copy来说,第一层创建的是新的内存地址,而从第二层开始,指向的都是同一个内存地址,
所以,对于第二层以及更深的层数来说,保持一致性
l1 = [1,2,[1,2,3,[22,33,44]],4] l2=l1.copy() l1[2].append(666) print(l1) print(l2) print(id(l1)) print(id(l2))
#deep.copy
对于深copy来说,两个是完全独立的
改变任意一个任何元素(无论多少层),另一个绝对不改变
import copy
li=[1,2,[1,2,3],4]
l2=copy.deepcopy(l1)
li[2].append(666)
print(l1,l2)
print(id(l1))
print(id(l2))
#切片是浅copy
l1=[1,2,3,[22,33]]
l2=l1[:]
l1[3].append(666)
print(l2) #[1,2,3,[22,33,666]]
3、编码的补充
#gbk--->utf-8
s='alex'
s1=s.encode('gbk')
print(s1)
s2=s1.decode('gbk').encode('utf-8')
print(s2)