集合
Set={'wusir','alex',1,2,3}
集合要求里面的元素必须是不可变的数据类型,但是集合本身是可变的数据类型。
集合里面的元素不重复(天然去重),无序。
主要用途:1,去重。
2,关系测试。
去重
l1 = [1,1,2,3,4,4,3,2,1,5,5]
set1 = set(l1)
l2 = list(set1)
增和删
set1.add('abc')#直接加
set1.update('abc')#迭代着加,相当于extend
set1.remove('abc')#直接删
set1.pop()#随机删
set1.clear()#清空集合
del set1#在内存上删除整个集合
discard#删除,没有的话不会报错
关系测试
set1 = {1,2,3,4,5}
set2 = {4,5,6,7,8}
交集
print(set1 & set2)
print(set1.intersection(set2))
并集
print(set1 | set2)
print(set1.union(set2))
反交集
print(set1 ^ set2)
print(set1.symmetric_difference(set2))
差集
print(set1 - set2)
print(set1.difference(set2))
子集
set1 = {1,2,3}
set2 = {1,2,3,4,5,6}
print(set1 < set2) # True
print(set1.issubset(set2))
超集
print(set2 > set1)
print(set2.issuperset(set1))
冻结集合
set1 = {1,2,3}
set3 = frozenset(set1)
print(set3) # 不可变的数据类型。
深浅copy
浅copy:l1中的列表加了一个666,l2也会跟着一起加
l1 = [1,2,3,[4,5,6,7],8,9]
l2 = l1.copy()
l1[3].append(666)
print(l2)
深copy
import copy
l1 = [1,2,3,[22,]]
l2 = copy.deepcopy(l1)
print(l1,l2)
l1.append(666)
l1[-1].append('太白')
print(l2)
各数据类型的转换
字典
dict = {'name': 'Zara', 'age': "7", 'class': 'First'}
字典转为字符串
1.print(str(dict),type(str(dict)))
返回{'name': 'Zara', 'age': "7", 'class': 'First'}
2.print("".join(dict))
将字典中所有的key转成字符串(前提是所有的key都是str)
3.print("".join(dict.values()))
将字典中所有的value转成字符串(前提是所有的value都是str)
字典转元组
1.print(tuple(dict))
将字典中所有的key转成元组
2.print(tuple(dict.values()))
将字典中所有的value转成元组
字典转列表
1.print(list(dict)
将字典中所有的key转成列表
2.print(tuple(dict.values()))
将字典中所有的key转成列表
元组
tup=(1, 2, 3, 4, 5)
qwe = ("hi","hello","world")
元组转字符串
1.print(str(tup),type(str(tup)))
print(str(qwe),type(str(qwe)))
2.print("".join(qwe)) (前提是qwe中的数据类型都是str)
元组转列表
print(list(tup))
元组不能转字典
列表
nums=[1, 3, 5, 7, 8, 13, 20];
l1 = ["hi","hello","world"]
列表转字符串
1.print(str(nums))
2.print(" ".join(l1)) (前提是l1中的数据类型都是str)
列表转元组
1.print(tuple(nums))
2.print(tuple(l1))
列表不能转字典
字符串
s1="1,2,3"
s2="hi hello world"
字符串转列表
1.print(list(eval(s1)))适用于s1这种字符串里是int类型的
2.print(s1.split())
字符串转元组
1.print(tuple(eval(s1)))不适用s1里面有str
2.print(tuple(s2.split()))适用于s2里都是str
字符串转字典
sd = "{'name':'ljq', 'age':24}"
print(eval(sd))
一些坑
元组
如果元组中只有一个数据,且没有逗号,则该 '元组' 与里面的数据的数据类型相同。
tu1 = (1,)
tu2 = ('abc')
tu3 = ([1,2,3],)
print(tu1,type(tu1))
print(tu2,type(tu2))
print(tu3,type(tu3))
列表
在循环一个列表时,如果对列表中的某些元素进行删除,
那么此元素后面的所有元素就会向前进一位,他们的索引就会发生变化。
l1 = [11, 22, 33, 44, 55, 66, 77, 88]
#这样在循环里面删除结果与预期不一样
for i in range(len(l1)):
if i % 2 == 1:
l1.pop(i)
print(l1)
解决:可以倒着删除
for index in range(len(l1)-1, -1, -1):
if index % 2 == 1:
l1.pop(index)
print(l1)
在循环一个列表时,最好不要对此列表进行改变大小(增删)的操作。
字典
字典创建的第三中方法
创建字典的第三中方法,但是这种字典里面的value是指向同一地址,改一个另外的也一起改了。
fromkeys()
dic1 = dict.fromkeys([1,2,3],'abc')
print(dic1)
在循环一个字典时,不能改变字典的大小。
dic = {'key1': 'value1','key2': 'value2', 'k3':'v3', 'name': 'alex'}
将 dic的键中含有k元素的所有键值对删除。
for key in dic:
if 'k' in key:
dic.pop(key)
dictionary changed size during iteration: 在循环一个字典时,不能改变字典的大小。
解决:加一个列表
l1 = []
for key in dic:
if 'k' in key:
l1.append(key)
# print(l1)
for key in l1:
dic.pop(key)
print(dic)