07_python_集合深浅拷贝

一、join

 1 li = ["李嘉诚", "麻花藤", "林海峰", "刘嘉玲"]
 2 s = "_".join(li)   # 循环遍历列表,把列表中的每一项用''_''拼接
 3 print(s)
 4 结果:
 5 李嘉诚_麻花藤_林海峰_刘嘉玲
 6 li = "花闺"
 7 s = "_".join(li)
 8 print(s)
 9 结果:
10 花_闺
  1、join()方法是把列表转换成字符串,join就是迭代。
    字符串  =>  列表        s.split()             列表  =>  字符串          '_' . join( li )
  2、删除列表中的元素,删除字典也同样方法
    循环删除列表中的元素会出现删不干净的问题
1 li = [11, 22, 33, 44]
2 for e in li:             # for 循环内部存在一个变量来记录当前被访问循环的位置索引,每次删除都会涉及元素移动
3  li.remove(e)
4 print(li)
5 结果:
6 [22, 44]

  由于删除元素会导致元素的索引改变, 所以容易出现问题. 尽量不要再循环中直接去删 除元素. 可以把要删除的元素添加到另⼀个集合中然后再批量删除.

1 li = [11, 22, 33, 44]
2 li_new = []
3 for el in li:
4     li_new.append(el)
5 for i in li_new:
6     li.remove(i)
7 print(li)

  字典删除元素

1 dic = {'k1': 'alex', 'k2': 'wusir', 's1': '⾦⽼板'}
2 dic_del_list = []
3 # 删除key中带有'k'的元素
4 for k in dic:
5  if 'k' in k:
6  dic_del_list.append(k)
7 for el in dic_del_list:
8  del dic[el]
9 print(dic)

二、fromkeys()

1 dic = dict.fromkeys(["jay", "JJ"], ["周杰伦", "麻花藤"])
2 print(dic)
3 结果:
4 {'jay': ['周杰伦', '麻花藤'], 'JJ': ['周杰伦', '麻花藤']}

  fromkeys()不是改变字典,它是一个类方法,作用是创建新字典前⾯列表中的每⼀项都会作为key, 后⾯列表中的内容作为value. ⽣成新dict,fromkeys正常来说应该是类名访问的

1 d = dict.fromkeys(['a','b'],[])
2 d['a'].append('alex')
3 结果:
4 {‘a’:['alex'], 'b':['alex']}
5 # 所有key用的是同一个列表,改变其中一个,另一个也跟着改变         

三、集合 set()

  1、set集合是python的⼀个基本数据类型. ⼀般不是很常⽤. set中的元素是不重复的.⽆序的.⾥ ⾯的元素必须是可hash的(int, str, tuple,bool), 我们可以这样来记. set就是dict类型的数据但 是不保存value, 只保存key. set也⽤{}表⽰
  注意: set集合中的元素必须是可hash的, 但是set本⾝是不可hash得. set是可变的. 
  2、字典中key不会重复。集合中存的如字典中key类似
    s = set( ) # 空集合
    s = {1,2,3} # set集合
  3、集合的特点:不重复,元素不可变(可hash)
  4、去重
1 li = [1,2,3,1,1,1,1,2,2,2,4,4,4,5,5,5,5]
2 se = set(li)
3 li_new = list(se)
4 print(li_new)

四、深浅拷贝

  1、定义
 
  (1) 赋值没有创建新对象。多个变量共享同一个对象
 

 

  (2)浅拷贝。 会创建新对象。 新的对象中里面的内容不会被拷贝
 

 

 
  (3)深拷贝。 创建一个一摸一样的完全新的对象。 这个对象延伸出来的内容也会跟着复制一份
 

 

 

posted @ 2018-09-11 19:07  qi.hu  阅读(186)  评论(0编辑  收藏  举报