1、基础数据类型的补充
join() "*".join('眉飞色舞') # 眉*飞*色*舞 ;
把传递进去的参数进行迭代,获取到的每个元素和前面的* 进行凭借,得到的是字符串。
split()根据给的参数进行切割,切割的结果是列表
lst = ['你是','谁','大风','啊',] s = '*'.join(lst) print(s) # 你是*谁*大风*啊 s1 = '你是*谁*大风*啊' print(s1.split('*')) # ['你是', '谁', '大风', '啊']
把字符串转化成列表,:split()
把列表转化成字符串:join()
2、关于删除
列表和字典:都不能再循环的时候直接删除。
删不干净,原因是:删除一个,元素的索引要重新排列,for循环向后走一个,中间差一个。
lst =['足球','羽毛球','棒球','高尔夫','电子竞技','篮球','台球'] for ball in lst: lst.pop(0) print(lst) # ['电子竞技', '篮球', '台球']
lst =['足球','羽毛球','棒球','高尔夫','电子竞技','篮球','台球'] for ball in lst: lst.remove(ball) print(lst) # ['羽毛球', '高尔夫', '篮球']
从最后一位删除
lst =['足球','羽毛球','棒球','高尔夫','电子竞技','篮球','台球'] for i in range(len(lst)): lst.pop() print(lst) # []
最合理的删除方式:
1、需把要删除的内容记录在新列表中,2、然后循环这个新列表,删除原来的字典或者列表。
# 需求:删除带球的运动项目 lst =['足球', '羽毛球', '棒球', '高尔夫', '电子竞技', '篮球', '台球'] lst1 = [] # 创建新列表 for ball in lst: #循环列表中的每一个元素 if '球' in ball: lst1.append(ball) # 讲带球的运动项目加到新列表中 for el in lst1: # 循环新列表中的每一项 lst.remove(el) # 删除老列表中的带球的运动项目 print(lst) # ['高尔夫', '电子竞技']
字典
字典在循环的时候是不能被删除的
dic = {'一班':'张娜','二班':'李冰','三班':'孙梦','四班':'刘欣'} for k in dic: dic.pop(k) print(dic) # 报错 dictionary changed size during iteration
合理的删除方式:
1、把要删除内容的key保存在一个新列表中
2、循环这个列表,删除字典中的key:value
dic = {'一班': '张娜','二班': '李冰','三班': '孙梦','四班': '刘欣'} lis =[] for k in dic: lis. append(k) for c in lis: dic.pop(c) print(dic) # {}
集合和字典是一家人
字典:key必须是不可变的,可哈希的,不重复的
集合:元素必须是u可变的,可哈希的,不重复的
fromkeys() 帮我们创建字典用的(面试的时候常用)
把第一个参数进行迭代,拿到每一项作为key和后面的value组成字典。
注1:返回新字典和原来的字典没有关系,老字典不会变更
dic ={} d = dic.fromkeys('五班','牧校') print(dic) # {} print(d) # {'五': '牧校', '班': '牧校'}
注2:如果value是可变的数据类型,各个key共享同一个可变的数据类型,其中一个被改变了,其他的都跟着变。
dic = {} d = dic.fromkeys('浩海星辰',[]) d['海'].append('梦') print(d) # {'浩': ['梦'], '海': ['梦'], '星': ['梦'], '辰': ['梦']}
dic = {} d = dic.fromkeys('浩海星辰', []) d['海']= '梦' print(d) # {'浩': [], '海': '梦', '星': [], '辰': []}
3、深浅拷贝
1、= 没有创建新对象,只是把内存地址进行了复制
lst = ['春天','夏天','秋天','冬天'] lst1 = lst print(id(lst)) print(id(lst1)) # 2198492593352 # 2198492593352
2、浅拷贝 lst.copy() 只拷贝第一层,可以帮我们创建新的对象,和原来的长得一模一样
lst = ['春天','夏天','秋天','冬天'] lst1 = lst.copy() print(id(lst)) print(id(lst1)) # 1575045283016 # 1575045309320
lst1 = lst.copy() lst[4].append('晚上') print(lst) print(lst1) # ['春天', '夏天', '秋天', '冬天', ['早上', '中午', '晚上']] # ['春天', '夏天', '秋天', '冬天', ['早上', '中午', '晚上']]
3、深拷贝 import copy
copy.deepcopy() 会把对象内部的所有内容都进行拷贝,深度克隆(clone),原型模式
import copy lst = ['春天','夏天','秋天','冬天',['早上','中午']] lst1 = copy.deepcopy(lst) lst[4].append('晚上') print(lst) print(lst1) # ['春天', '夏天', '秋天', '冬天', ['早上', '中午', '晚上']] # ['春天', '夏天', '秋天', '冬天', ['早上', '中午']]
为什么要深浅拷贝?
提高创建对象的速度
计算机中最慢的就是创建对象,需要分配内存
最快的方式就是二进制流的形式进行复制,速度最快