str知识点补充:
#join() 将列表中的每个元素中间加上一个字符,连接成一个字符串 list = ['a','b','c','d'] str = '*'.join(list) print(str) # a*b*c*d # 将列表 -> 字符串 用join() 将字符串 -> 列表,用split() 切割
关于列表或字典循环删除的问题:
列表:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#循环删除列表中的元素,以达到清空列表的结果 #错误写法 lis = [1,2,3,4] """ for i in lis: print(lis.index(i)) # 0 1 lis.remove(i) # [2,4] print(lis) #删除不干净的原因:每次删除一个元素,后面的元素总会向前进一个位置,到最后会找不到一部分索引 """ #way 1 :(可以达到目的,但不是很好) for i in range(0,len(lis)): lis.remove(lis[0]) #每次只删除最开始的元素 print(lis) #删除列表完美写法 new_lis = [] #先将要删除的东西放入到新列表中 for i in lis: new_lis.append(i) #利用新列表作为目标,去删除老列表中的东西 for el in new_lis: lis.remove(el)
原因:for 的运行过程中,会有一个指针来记录当前循环的元素是哪一个,一开始这个指针指向第0个,然后获取到第0个元素,紧接着删除第0个,这个时候,原来是第一个的元素就会自动编程第0个,然后指针向后移动一次,指向1元素,这时原来的1已经变成了0,也就不会被删除了。
字典:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#关于将字典清空 dic = {'a':1,'b':2,'c':3} #错误写法 # for i in dic: #这儿直接写dic 相当于dic.key() # dic.pop(i) # dictionary changed size during iteration 在遍历字典的时候不允许修改 #正确的写法 #先将你要删除的key存储到List中 li = [] for i in dic: li.append(i) #再根据li中的元素,删除字典中的键值对 for i in li: dic.pop(i) print(dic) # {}
由于删除元素会导致元素的索引改变,所以容易出现问题,尽量不要在循环中直接去删除元素,可以把要删除的元素添加到另一个集合中然后再批量删除。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#dict的fromkey() 通过list 创建一个dict #将前一项的元素迭代与第二项的元素形成键值对 #前面的每一项都会作为key,后面的列表中的内容作为value,形成字典 dic = {} # dic.fromkeys(['123','234'],"你好") # print(dic) #{} 没有接收返回值 dic = dic.fromkeys(['123','234'],["你好"]) #返回字典类型,需要赋值给dic print(dic) # {'123': ['你好'], '234': ['你好']} #两个key指向的是同一个value 一个变则都变 dic['123'].append('世界') print(dic['234']) # ['你好', '世界']
类型转换:
- 元组 -> 列表 list(tuple)
- 列表 -> 元组 tuple(list)
- list -> str str.join(list)
- str -> list str.split()
转换成False的数据:
0,‘’,None,[],{},set(),(), False
set集合
set集合是python中的一个基本数据类型,一般不是很常用,set中的元素是不重复的,无序的,里面的元素必须是可哈希的,即不可变的(int,str,tuple,bool)
set就是dict类型的数据,但是不保存value,只保存key,用{}表示
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#set 本身不可哈希(可以修改) 但是其中元素是可哈希的 元素不可重复 元素无序 存储的相当于字典中的key #创建一个set se_1 = set({1,2,3,[1,2]}) # wrong: unhashable type: 'list' print(se_1) se_1 = {1,2,3} se_2 = set({3,4,5}) print(se_1,se_2) #因为set不可以重复,所以它可以给list去重 lis = ['周杰伦','周星驰','周润发','周星驰'] se_3 = set(lis) #将list转换为set lis = list(se_3) #将set转换为list print(lis) # ['周杰伦', '周星驰', '周润发'] #set的操作: # ---------- 增 ------------- add update se = set({}) # 如果单写{},会被认为是字典 for i in range(0,5): se.add(i) #增 print(se) # {0, 1, 2, 3, 4} se.add(4) #重复的数据无用 print(se) se.update(['q','w','e']) #迭代着更新 print(se)# {0, 1, 2, 3, 4, 'w', 'q', 'e'} # ---------- 删 ------------- ret = se.pop() #随便删除一个元素 返回删除的那个元素 se.remove(1) #删除指定元素 se.clear() #清空 结果是set() 因为要和字典区别 # ---------- 改 ------------- # 因为set是无序的,所以不能通过索引删除元素 #先删除再添加 se.remove(1) se.add('添加的元素') # ---------- 查 ------------- #set可迭代 可以用for循环进行遍历 for i in se: print(i) se_1 = {1,2,3,4} se_2 = {4,5,6,7} # ---------- 其他操作 ------------- #交集 print(se_1 & se_2) #{4} print(se_1.intersection(se_2)) #并集 print(se_1|se_2) # {1, 2, 3, 4, 5, 6, 7} print(se_1.union(se_2)) #差集 print(se_1 - se_2) #{1,2,3} print(se_1.difference(se_2)) #反交集 print(se_1 ^ se_2) # {1, 2, 3, 5, 6, 7} print(se_1.symmetric_difference(se_2)) #子集 # print(se_1 < se_2) # False # print(se_1.issubset(se_2)) #超集 print(se_1 > se_2) print(se_1.issuperset()) #False #set集合本身是可以发生改变的,是不可哈希的,我们可以使用frozenset来保存数据。 # frozenset是不可变的,可就是一个可哈希的数据类型 s = frozenset(['q','w','e']) dic = {s:'123'} #可以正常使用了 print(dic)