第七天

今日主要内容
一. 对之前的知识点进行补充.
1. str中的join方法. 把列表转换成字符串
2. 列表和字典在循环的时候不能直接删除.
需要把要删除的内容记录在新列表中.
然后循环新列表.删除字典或列表
3. fromkeys()
1. 返回新字典. 对原字典没有影响
2. 后面的value.是多个key共享一个value
二. set集合
特点:
无序, 不重复, 元素必须可哈希(不可变)
作用:
去重复
本身是可变的数据类型. 有增删改查操作.
frozenset()冻结的集合. 不可变的. 可哈希的
三. 深浅拷贝(难点)
1. 赋值. 没有创建新对象. 公用同一个对象
2. 浅拷贝. 拷贝第一层内容. [:]或copy()
3. 深拷贝. 拷贝所有内容. 包括内部的所有.

 

a = 128
print(id(a))

a = "alex" # 这是第一次产生alex
b = "alex" # 这句话不会产生新的字符串

print(id(a), id(b))
a = "谦虚"
b = "谦虚"
lst = ["jj", 'jay',"谦虚"]
lst2 = ["jj", 'jay',"谦虚"]

print(id(lst), id(lst2))

在python中一般的字符串都是会被缓存的. 为了节约内存
a = "alex@wusir"
b = "alex@wusir"
print(id(a), id(b))

a = [1,2,3]
b = a
c = b

# 列表的创建
print(c == a) # 判断的是值.
print(c is a) # 判断两个变量指向的是否是同一个对象

s = "你好啊"
bs = s.encode("utf-8")
print(bs)

ascii中的内容编码之后还是原来的内容
中文编码之后是\x

bs = b'\xe4\xbb\x8a\xe5\xa4\xa9\xe6\x99\x9a\xe4\xb8\x8a\xe7\xba\xa6\xe4\xb9\x88?' # 用什么编码就要用什么解码
s = bs.decode("utf-8")
print(s)

gbk的一句话
bs = b'\xc4\xe3\xb3\xd4\xc1\xcb\xc3\xb4'
想要发给别人.
把这句话翻译成字符串
s = bs.decode("gbk")
bbs = s.encode("utf-8")
print(bbs) # utf-8

a = [[11, 22, 33], [44, 55, 66]]
b = [[77,88,99], [88,99,10]]

f = zip(*a, *b)
print(list(f))

 

将列表转换成字符串. 每个元素之间用_拼接
s = "**".join(["高华新", "刘清扬", "崔园樟"])
print(s)

ss = "高华新**刘清扬**崔园樟"
ss.split("**")

字符串转换成列表: split()
把列表转换成字符串: join()

s = "_".join("马化腾")
print(s)

join(可迭代对象)

lst = ["紫云", "大云", "玉溪", "紫钻","a","b"]
# lst.clear()
new_lst = [] # 准备要删除的信息
for el in lst: # 有一个变量来记录当前循环的位置
new_lst.append(el)

# 循环新列表, 删除老列表
for el in new_lst:
lst.remove(el)

# 删除的时候, 发现. 剩余了一下内容. 原因是内部的索引在改变.
# 需要把要删除的内容记录下来. 然后循环这个记录. 删除原来的列表

print(lst)
print(new_lst)


lst = ["张国荣", '张铁林', '张国立', "张曼玉", "汪峰"]
# 删掉姓张的
# 记录姓张的.
zhangs = []
for el in lst:
if el.startswith("张"):
zhangs.append(el)
for el in zhangs:
lst.remove(el)
print(lst)
print(zhangs)

字典
dic = {"提莫":"冯提莫", "发姐":"陈一发儿", "55开":"卢本伟"}
# dic.clear()
lst = []
for k in dic:
lst.append(k)

for el in lst:
dic.pop(el)
print(dic)

综上. 列表和字典都不能再循环的时候进行删除. 字典再循环的时候不允许改变大小

dic = {"apple":"苹果", "banana":"香蕉"}
# 返回新字典. 和原来的没关系
ret = dic.fromkeys("orange", "橘子") # 直接用字典去访问fromkeys不会对字典产生影响
ret = dict.fromkeys("abc",["哈哈","呵呵", "吼吼"]) # fromkeys直接使用类名进行访问
print(ret)

 

a = ["哈哈","呵呵", "吼吼"]
ret = dict.fromkeys("abc", a) # fromkeys直接使用类名进行访问
a.append("嘻嘻")
print(ret)

 

s = {"周杰伦", "的老婆","叫昆凌", (1,2,3), "周杰伦"}
lst = [11,5,4,1,2,5,4,1,25,2,1,4,5,5]
s = set(lst) # 把列表转换成集合. 进行去重复
lst = list(s) # 把集合转换回列表.
print(lst)

集合本身是可变的数据类型, 不可哈希, 有增删改查操作
s = {"刘嘉玲", '关之琳', "王祖贤"}
s.update("麻花藤") # 迭代更新
print(s)

 

引入copy模块
import copy

lst1 = ["金毛狮王", "紫衫龙王", "青翼蝠王", "白眉鹰王",["张无忌","赵敏","周芷若"]]
lst2 = lst1[:] # 浅拷贝
lst2 = lst1.copy() # 浅拷贝
lst2 = copy.deepcopy(lst1)

lst1[4].append("小昭")

print(lst1)
print(lst2)

print(id(lst1[4]))
print(id(lst2[4]))

1. 赋值操作. 没有创建新对象
2. 浅拷贝. 只拷贝第一层内容. [:] copy()
3. 深拷贝. 把这个对象内部的内容全部拷贝一份. 引入copy模块. deepcopy()

 

 

 



集合中的元素必须是可哈希的. 不重复的. 可以去重. 哈希hash算法

posted on 2018-08-03 17:53  符,  阅读(124)  评论(0)    收藏  举报

导航