Day7笔记

昨日内容回顾。
is == id

== :数值的比较
is :内存地址的比较
id 查看内存地址。

 

小数据池:

节省内存空间。
int -5~256
str 有特殊字符不存在小数据池。
单个字符*int(20) 以内 有小数据池

 

编码:

py3:
英文:
str: 表现形式: s = 'alex'
内部编码方式:unicode

bytes:表现形式: s = b'alex'
内部编码方式:非unicode(utf-8,gbk...)


中文:
str: 表现形式: s = '中国'
内部编码方式:unicode

bytes:表现形式: s = b'\xe2\xe2\xe2\xe2\xe2\xe2\'
内部编码方式:非unicode(utf-8,gbk...)

str---> bytes s.encode('gbk') s.encode('utf-8') 编码
bytes ---> str s.decode('gbk') s.decode('utf-8') 解码

 

------------************---------------

 

集合:
数据类型:
不重复,无序,它里面的元素是可哈希的。他本是是不可哈希,他不能作为字典的key。
作用:1,去重。

# 去重

 li = [11,11,22,22,33,33,33,44]
 li = list(set(li))
 print(li)
输出结果:[33, 11, 44, 22]
 
set
= {11,22,33,11,22,33,44} print(set)
输出结果:[11, 22, 33, 11, 22, 33, 44]

 

# set1 = {'alex','wusir','ritian','egon','barry'}

#
 set1.add('女神')
 print(set1)
输出结果:{'barry', 'wusir', '女神', 'alex', 'egon', 'ritian'}


set1.update(
'abc') set1.update([1,2,3]) print(set1)
输出结果:{'a', 1, 2, 3, 'b', 'wusir', 'ritian', 'egon', 'alex', 'barry', 'c'}

 

#
 set1.remove('alex')
 print(set1)
输出结果:{'ritian', 'egon', 'wusir', 'barry'}

ret
= set1.pop() # 随机删除 print(ret) print(set1) 输出结果:{'alex', 'barry', 'wusir', 'egon'}
set1.clear()
print(set1) # set() 输出结果:set()
del set1 print(set1)
输出结果:会报错

for i in set1:
print(i)
输出结果:
egon

barry

ritian

wusir

alex

 

#

set1 = {1,2,3,4,5}

set2 = {4,5,6,7,8}

 

# 交集:  &   intersection
 print(set1 & set2)
输出结果:{4, 5}
print(set1.intersection(set2))
输出结果:{4, 5}

 

#反交集:   ^    symmetric_difference
 print(set1 ^ set2)
 输出结果: {1, 2, 3, 6, 7, 8}
 
print(set1.symmetric_difference(set2))
输出结果: {1, 2, 3, 6, 7, 8}

 

#并集: |  union
print(set1 | set2)
输出结果:{1, 2, 3, 4, 5, 6, 7, 8}
print(set1.union(set2))
输出结果:{1, 2, 3, 4, 5, 6, 7, 8}

 

#差集
 print(set1 - set2)
输出结果:{1, 2, 3}
print(set2 - set1)
输出结果:{8, 6, 7}

 

set1 = {1,2,3}
 set2 = {1,2,3,4,5,6}
 print(set1.issubset(set2)) # 子集
输出结果:True
print(set2.issuperset(set1)) # set2 是set1的超集  
输出结果:False

set1
= {'barry',"wusir"}
set2
= frozenset(set1)
print(set2,type(set2))
输出结果:frozenset({'barry', 'wusir'}) <class 'frozenset'>  #frozenset:原封集合

 

2.数据类型补充:

#str
 s = 'alex'
 s1 = ' '
 ret = s1.isspace()
 print(ret)

#tuple

# 对于元组:如果只有一个元素,并且没有逗号,
# 此元素是什么数据类型,改表达式就是什么数据类型。

 tu = (1)
 tu1 = (1,)
 print(tu,type(tu))
 print(tu1,type(tu1))

 tu = ('老男孩')
 tu1 = ('老男孩',)
 print(tu,type(tu))
 print(tu1,type(tu1))

 tu = ([1,2,3])
 tu1 = ([1,2,3],)
 print(tu,type(tu))
 print(tu1,type(tu1))

 

#对于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)

 for i in range(len(li)):
 print(li) # [11, 22, 33, 44, 55] [11, 22, 33, 44, 55] [11, 33, 44, 55] [11, 33, 44, 55] [11, 33, 44] print(i) # 0 1 2 3 4

 if i % 2 == 1:
 del li[i]
 print(li) # [11, 22, 33, 44, 55] [11, 33, 44, 55] [11, 33, 44, 55] [11, 33, 44] [11, 33, 44]
 print(i) # 0 1 2 3 4
 print(li) # list assignment index out of range

 del li[100] # list assignment index out of range
 for i in li:
 print(li)

 li.remove(i)
 print(li)
 print(li)

 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)

 

3.在循环字典中,不能增加或者删除此字典的键值对。
# dictionary changed size during iteration

dic = {'k1':'value1','k2':'value2','name':'wusir'}
# 将字典中含有k元素的键,对应的键值对删除

for i in dic: if 'k' in i: del dic[i] count = 0 for i in dic: dic[i+str(count)] = dic[i] count += 1 l1 = [] for i in dic: if 'k' in i: l1.append(i) # for i in l1: del dic[i] print(dic)

 

# 数据转换:
# int str bool
#str list split join
#无意义

 li = ['wusir','alex']
 s = str(li) # '['wusir','alex']'
 print(s,type(s))

 tuple list
 tu = (1,2,3)
 li = list(tu)
 print(li)

 l1 = [1,2,3]
 tu1 = tuple(l1)
 print(tu1)

 

# 数据类型转化成bool 为False

 0 " [] () {}

 

#tuple >> str

 tu = ('wusir','老男孩')
 s = " ".join(tu)
 print(s)

 

4.编码补充

s = 'alex'
s1 = s.encode('utf-8')  # unicode ---> utf-8 编码
s3 = s1.decode('utf-8')  # utf-8 ---> unicode 解码
print(s3)

 s = 'alex'
 s1 = s.encode('gbk')  # unicode ---> gbk 编码
 s3 = s1.decode('gbk')  # gbk ---> unicode 解码
 print(s3)

gbk ---> utf-8
 s = 'alex'
 s1 = s.encode('gbk')
 print(s1)

 s2 = s1.decode('gbk').encode('utf-8')
print(s2)

s = '老男孩'
s1 = s.encode('gbk')
print(s1)

s2 = s1.decode('gbk').encode('utf-8')
print(s2)

 

5.copy

 l1 = [1,2,3]
 l2 = l1
 l2.append(111)
# # print(l1,l2)

 print(id(l1))
 print(id(l2))
# # 对于赋值运算,指向的是同一个内存地址。字典,列表,集合都一样。
 s = 1000
 s1 = s
 print(id(s))
 print(id(s1))

 

#copy 不是指向一个,在内存中开辟了一个内存空间
#对于浅copy来说,第一层创建的是新的内存地址,
# 而从第二层开始,指向的都是同一个内存地址,
# 所以,对于第二层以及更深的层数来说,保持一致性。

 l1 = [1,2,3]
 l2 = l1.copy()
 l1.append(111)
 print(id(l1),id(l2))

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
 l1 = [1, 2, [1, 2, 3], 4]
 l2 = copy.deepcopy(l1)
 l1[2].append(666)
 print(l1,l2)
 print(id(l1[2]),id(l2[2]))

 l1 = [1,2,3]
 l2 = l1
 l2.append(111)
 print(l1,l2)

 l1 = [1,2,3,[22,33]]
 l2 = l1[:]
 l1[3].append(666)
 print(l2) # [1, 2, 3, [22, 33, 666]]

 l1 = [1,2,3,]
 l2 = l1[:]
 l1.append(666)
 print(l2)

 

posted on 2018-03-26 14:55  麦兜家的狗🐶  阅读(43)  评论(0)    收藏  举报

导航