12.22
1、昨日内容回顾
小数据池: int:-5--256 str:1.不能有特殊字符 2.*int不能超过20 编码:所能看到的最小构成单位叫字符 ascii : 8位 1字节 表示1个字符 unicode 32位 4个字节 表示一个字符 utf- 8 1个英文 8位,1个字节 欧洲 16位 两个字节 表示一个字符 亚洲 24位 三个字节 表示一个字符 gbk 1个英文 8位,1个字节 亚洲 16位 两个字节 表示一个字符 bytes: s = 'alex' b = s.encode('utf-8') print(b) # b'alex'
2、今日内容讲解
1.基础数据类型汇总补充
str
int
list
在循环一个列表时,最好不要删除列表中的元素,这样会使索引发生改变,从而报错。
bool
dict
1,fromkeys()
tuple元祖
如果元祖里面只有一个元素且不加,那此元素是什么类型,就是什么类型。
2、集合
可变的数据类型,他里边的元素必须是不可变的数据类型,无序,不重复
(1)创建集合
set1 = set({1,2,3,}) print(set1)
(2)增删查
增
set1 = {'alex','wusir','ritian','egon','barry'} set1.add("jing") set1.update("kkkk") print(set1)
删
set1.pop() set1.remove("alex") set1.clear() del set1
查
for i in set1: print(i)
(3)集合的操作
交集
set1 = {1,2,3,4,5} set2 = {4,5,6,7,8} print(set1 & set2) print(set1.intersection(set2))
并集
set1 = {1,2,3,4,5} set2 = {4,5,6,7,8} print(set1|set2) print(set1.union(set2))
差集
set1 = {1,2,3,4,5} set2 = {4,5,6,7,8} print(set1 - set2) print(set1.difference(set2))
反交集
set1 = {1,2,3,4,5} set2 = {4,5,6,7,8} print(set1 ^ set2) # {1, 2, 3, 6, 7, 8} print(set1.symmetric_difference(set2))
子集与超集
set1 = {1,2,3} set2 = {1,2,3,4,5,6} print(set1 < set2) print(set1.issubset(set2)) # 这两个相同,都是说明set1是set2子集。 print(set2 > set1) print(set2.issuperset(set1)) # 这两个相同,都是说明set2是set1超集。
去重
li = [1,2,33,33,2,1,4,5,6,6] set1 = set(li) print(set1) li = list(set1) print(li) s1 = {1,2,3} print(s1,type(s1))
3、深浅copy
赋值运算
l1 = [1,2,3,['barry','alex']] l2 = l1 l1[0] = 111 print(l1) # [111, 2, 3, ['barry', 'alex']] print(l2) # [111, 2, 3, ['barry', 'alex']] l1[3][0] = 'wusir' print(l1) # [111, 2, 3, ['wusir', 'alex']] print(l2) # [111, 2, 3, ['wusir', 'alex']]
对于赋值运算来说,l1与l2指向的是同一个内存地址,所以他们是完全一样的。
浅copy
l1 = [1,2,3,['barry','alex']] l2 = l1.copy() print(l1,id(l1)) # [1, 2, 3, ['barry', 'alex']] 2380296895816 print(l2,id(l2)) # [1, 2, 3, ['barry', 'alex']] 2380296895048 l1[1] = 222print(l1,id(l1)) # [1, 222, 3, ['barry', 'alex']] 2593038941128print(l2,id(l2)) # [1, 2, 3, ['barry', 'alex']] 2593038941896 l1[3][0] = 'wusir' print(l1,id(l1[3])) # [1, 2, 3, ['wusir', 'alex']] 1732315659016 print(l2,id(l2[3])) # [1, 2, 3, ['wusir', 'alex']] 1732315659016
对于浅copy来说,第一层创建的是新的内存地址,而从第二层开始,指向的都是同一个内存地址,所以,对于第二层以及更深的层数来说,保持一致性。
深copy
import copy l1 = [1,2,3,['barry','alex']] l2 = copy.deepcopy(l1) print(l1,id(l1)) # [1, 2, 3, ['barry', 'alex']] 2915377167816 print(l2,id(l2)) # [1, 2, 3, ['barry', 'alex']] 2915377167048 l1[1] = 222 print(l1,id(l1)) # [1, 222, 3, ['barry', 'alex']] 2915377167816 print(l2,id(l2)) # [1, 2, 3, ['barry', 'alex']] 2915377167048 l1[3][0] = 'wusir' print(l1,id(l1[3])) # [1, 222, 3, ['wusir', 'alex']] 2915377167240 print(l2,id(l2[3])) # [1, 2, 3, ['barry', 'alex']] 2915377167304
对于深copy来说,两个是完全独立的,改变任意一个的任何元素(无论多少层),另一个绝对不改变
4、补充
枚举:enumerate:枚举,对于一个可迭代的(iterable)/可遍历的对象(如列表、字符串),enumerate将其组成一个索引序列,利用它可以同时获得索引和值。
li = ['alex','银角','女神','egon','太白'] for i in enumerate(li): print(i) for index,name in enumerate(li,1): print(index,name) for index, name in enumerate(li, 100): # 起始位置默认是0,可更改 print(index, name)
删除索引为奇数位的元素
lis = [11,22,33,44,55]
#第一种
lis = [11,22,33,44,55]
lis = lis[::2] print(lis)
#第二种
lis = [11,22,33,44,55] l1 = [] for i in lis: if lis.index(i) % 2 == 0: l1.append(i) lis = l1 print(lis)
#第三种
lis = [11,22,33,44,55] for i in range(len(lis)-1,-1,-1): if i % 2 == 1: print(i) del lis[i] print(lis) print(lis)