2018.12.4 今日所学

今日只要学习了

一. 基础数据类型的补充

二 ..深浅拷贝

一 . 主要内容:

之前讲的int 跟 str 已经讲过了80%的内容 接下来说剩下的:

 1 .join 

join与之前的spilt 作用是相反的.  join 是将列表中的数据通过操作变成字符串 . 而split是通过字符串的切割将字符串变成列表 .

具体用法:  如 :li = ["李嘉诚", "麻花藤", "?海峰", "刘嘉玲"]

       li1=' _ ' .join(li)

      print( li1 )   结果为''李嘉诚_麻花藤_?海峰_刘嘉玲''

由此我们可以看出join是将原来的列表类型变成了一个字符串

对比split :

 str = "李嘉诚,麻花藤,?海峰,刘嘉玲"

str1=str.split(" ,")

print(str1)   结果为 ['李嘉诚','麻花藤','?海峰','刘嘉玲']

我们可以看到这里的split是将之前的字符串形式变成了列表的形式

列表: 

循环删除列表中的每一个元素.

li = [11, 22, 33, 44]
for e in li:
li.remove(e)
print(li)
结果:
[22, 44]

这里的原因是 for 在循环的过程中 ,会有一个指针记录当前循环的元素是哪一个,一开始这个元素的指向是第0个,然后执行获取, 删除命令.当删除完第一个元素之后,之前第二个元素变成了第一个元素,索引改变了,但是指针指向了第二个元素,刚好错开了. 如果用pop删除系统会报错,只有这样才是可以的.

for el in range(len(li)):

li.pop()  # 这里默认删除的是最后一个   或者是  li.pop[0]  #删除第一个元素

这里我们要讲的办法是用另一个列表记录你要删除的内容 ,然后循环删除原来要删除的列表

  如: li = [11, 22, 33, 44]

li1=[]

for el in li:

  li1.append(el)

for e in li1:

  li.remove(e)

print(e)

注意:  由于元素删除后会导致元素的索引改变,容易出现问题,所以不要在循环中直接去单楚楚元素.可以把要删除的元素放到另一个列表中去,通过另一个列表的循环删除原来列表中的元素

dict 中可以通过fromkeys()来创建新的字典:

dic=dict.fromkeys(['jay','jj'],['周杰伦','麻花藤'])

print(dic)  结果 :{ 'jay' : ['周杰伦','麻花藤'] , ' jj ': ['周杰伦','麻花藤'] }

关于fromkeys 的两个大坑:

1,必须给前面赋值一个新的字典, 他返回的是新字典,与原字典无关.

dic={}

d=dic.fromkeys('张无极',[])

print(d)  结果为{'张':[],'无':'[]','极':[]}

2.如果value是可变的值.

dic={}

d=dic.fromkeys('张无极',[])

dic['张']='呵呵'

print(dic) 结果为{'张':[呵呵],'无':'[呵呵]','极':[呵呵]}

原因: 这里的'张' '无' '极'用的是同一个[],如果其中一个改变了[]的值,其他的也会改变

二 .深浅拷贝

1 浅拷贝( 只拷贝第一层)  拷贝出来的内容不是之前的原内容,只是创建了一个和之前一样的 (此处可以联想的抄作业)

     lst1 = ["金毛狮王", "紫衫龙王", "白眉鹰王", "青翼蝠王"]
   lst2 = lst1
  print(lst1)
  print(lst2)
  lst1.append("杨逍")
  print(lst1)
  print(lst2)
  结果:
  ["金毛狮王", "紫衫龙王", "白眉鹰王", "青翼蝠王" '杨逍']
  ["金毛狮王", "紫衫龙王", "白眉鹰王", "青翼蝠王", '杨逍']

2. 深拷贝 对象的所有内容都要复制 

from copy

lst2=copy.deepcopy(lst1)

这里的lst2就是深拷贝了lst1 中的所有内容,不会产生一个改变另一个跟着

改变的问题

猜你喜欢

转载自www.cnblogs.com/zty1304368100/p/10064626.html