day07

数据类型str用法补充

1     join()  是吧列表变成字符串

s=["哈哈","呵呵","你谁啊"]
a="_*_".join(s)
print(a)
#结果是哈哈_*_呵呵_*_你谁啊
tu = ('你好', "你不好", "你好不好")
s = "".join(tu)
print(s)
#结果是你好你不好你好不好
s = "金毛狮王"
s1 = "_".join(s) # 迭代把每一项进行拼接
print(s1)
#结果是金_毛_狮_王

"  ".join 里面纺纱就是用啥吧列表连接成字符串

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

s="hadhadhadha"
e=s.split("d")
print(e)
#结果是['ha', 'ha', 'ha', 'ha']

3  列表的删除问题

    列表在循环的时候如果执行了删除操作. 索引和长度会有变化. 这种删除是不安全.

          先把要删除的内容放在一个新列表中. 然后循环这个新列表. 删除老列表.

          dict在循环过程中是不允许删除的.
          把要删除的键放在列表中. 循环列表删除字典

lst = ["倚天屠龙记", "诛仙", "看见", "追风筝的人"]
lst.clear()
print(lst)
利用循环删除
for w in range(0,len(lst)):
    lst.pop()
print(lst)
new_lst=[]
for w in lst:
    new_lst.append(w)
for e in new_lst:
    lst.remove(e)
print(lst)

追加   字典的小问题

dic = dict.fromkeys(["jay", "jj"], ["周杰伦", "林俊杰"])
dic["jay"].append("蔡依林")
print(dic)  #同一个key值 后面追加v值
dic={}
dic.fromkeys(["葫芦娃", "蛇精"], ["冯提莫", "陈一发"])
print(dic)   #什么都不打印
循环删除的案例
dic = {"韩哥":"发图不留种", "奎峰":"斗图小皇帝", "徐阳":"开车不留情"}
lst=["奎峰"]
for er in lst: # 循环list
    dic.pop(er)  # 删除的是dict中的元素
print(dic)
lst = ["发图哥", "谁困. 下午就往他那发图", "轰炸"]
print(type(lst))  # 检查是什么类型 list
tu1=tuple(lst)  #是吧列表转换成元祖
print(tu1)
print(type(tu1))    #检查是什么类型  tuple

 4     set集合
        无序的. 不重复的. 内容必须是可哈希的数据类型.
        本身是不可哈希

dic = {"朱元璋":"明太祖", "朱棣":"明成祖", "朱元璋":"朱重八"}
dic["朱元璋"]=["和尚"]
print(dic)   #set就是存储的key, set集合不会重复, 无序

set的构成
s = {"alex", 1, True, {"你好"}}  #set是可以变的
s = {"马虎疼", [1,4,7]} # 不合法. [] 列表是不可哈希的
s = {"呵呵", "哈哈", "吼吼", (1, 4, 7)}
# print(s)

      添加:add(),update(),

lst = [1,4,7,1,4,5,6,7,8,2,1,3,9]
s=set(lst)
print(s)                      # 都是去重复
s = set({})
s.add("王祖蓝") # 添加元素
s.add("王祖贤")
s.add("王祖蓝")
print(s)

  update(),

s = {"李谷一", "周润发", "邓丽君", "黄家驹", "张国荣"}
s.update("中岛美嘉") # 迭代挨个更新
print(s)
s.update(["中岛美雪", "很牛B"])
print(s)     #结果是{'李谷一', '很牛B', '张国荣', '黄家驹', '中岛美雪', '周润发', '邓丽君'}

      删除:pop()

s = {"李谷一", "周润发", "邓丽君", "黄家驹", "张国荣"}
item = s.pop() # 随机删除
print(item)
s.remove("李谷一")   #删除
print(s)
for el in s:
    print(el)

  交集 并集 的问题

s1 = {"刘能", "赵四", "皮长山"}
s2 = {"刘科长", "冯乡长", "皮长山"}

#求交集
print(s1 & s2)
print(s1.intersection(s2)) # 交集

  

s1 = {"刘能", "赵四", "皮长山"}
s2 = {"刘科长", "冯乡长", "皮长山"}

# 并集
print(s1 | s2)
print(s1.union(s2)) # 并集
# s1 = {"刘能", "赵四", "皮长山"}
# s2 = {"刘科长", "冯乡长", "皮长山"}
# 差集, 把自己本身中和对方不相关的内容留下
# print(s2 - s1)
# print(s2.difference(s1))

          查询:可迭代对象
  需要可哈希的时候用frozenset()   集合是不可变的  用frozenset()创建的集合是可变的

 s = frozenset({1,5,7})
print(s)
for el in s:
    print(el)
dic = {s: "周杰伦"} # 验证. frozen是可哈希的. 不可变
print(dic)

.5 深浅拷贝
        拷贝是复制一份

lst1 = ["紫衫龙王", "白眉鹰王", "青翼蝠王", "金毛狮王"]
lst2 = lst1
print(id(lst1))
print(id(lst2))  # 浅拷贝是全部复制  id  地址都是一样的

  


        浅拷贝:  只会拷贝第一层内容. 第二层的内容不会拷贝
            1. copy() 2.[:]

 lst1 = ["紫衫龙王", "白眉鹰王", "青翼蝠王", "金毛狮王"]
# # lst2 = lst1.copy() # 拷贝,复制, 克隆
# lst2 = lst1[:]
# lst1.append("杨宵")
# print(lst1, lst2)

        深拷贝:  拷贝所有内容. 包括里层的所有内容

# lst1 = ["杨晓", "谢逊", ["说不得","听不得","打不得","骂不得"]]
#
# lst2 = lst1.copy() # 拿到的是第一层的复制品
# # print(id(lst1[2]), id(lst2[2]))
#
# lst1[2].append("看不得")
# print(lst1, lst2)

# 导入copy模块
import copy
lst1 = ["杨晓", "谢逊", ["说不得","听不得","打不得","骂不得"]]
lst2 = copy.deepcopy(lst1) # 深度拷贝
print(id(lst1[2]), id(lst2[2]))
lst1[2].append("看不得")
print(lst1, lst2)

  

  

  

原文地址:https://www.cnblogs.com/daien522556/p/9152351.html