集合(Set)
集合是无序的,无序也就没有索引,不能进行索引相关的操作。无序,python解释器就不能通过索引(位置)区分集合中的相同元素,所以集合中不能有相同的元素。
集合用大括号{ }表示。
集合中元素的数据类型可以不同,但集合中不能嵌套列表、元组、集合、字典。
a={1,1,3}
print(a) #{1,3} 会自动去掉重复的元素
a={1,"ok"} #数据类型可以不同
print(a) #{1, 'ok'}
a={1,"ok",[1,2]} #报错 集合中元素的数据类型可以不同,但集合中不能嵌套列表、元组、集合、字典。
print(a)
集合之间可以进行集合运算
a={1,2,3}
b={1,2,6}
print(a|b) #求并集 {1, 2, 3, 6}
print(a&b) #求交集 {1, 2}
print(a-b) #求差集(a中有,b中没有) {3}
print(a^b) #并集减去交集,即把a、b独有的元素组成一个集合 {3, 6}
字典(Dictionary)
字典是无序的。
字典中一个键值对就是一个元素。因为是用key来标识元素,所以同一个字典中,key不能相同(不会报错,但后面的值会覆盖前面的值)。
字典中的key、value的数据类型可以不同,但key必须是不可变的数据类型,比如数字、字符串、元组。
字典用大括号{ }表示。
a={"name":"张三","age":18} #key、value之间冒号分隔,键值对之间逗号分隔
a={1:"张三","age":18,"score":(100,90,99)} #字典中的key可以是不同的类型,但key必须是不可变的数据类型。value可以是任何类型。
a={"name":"张三","name":"李四"} #key不能相同,相同时,后面的值会覆盖前面的值
print(a) #{'name': '李四'}
集合的操作:
1.创建:
s1 = set(list)
s2 = set(tuple)
s3 = set(dict)
2.添加数据:
一.插入单个元素
s1.add(date) :
注意事项: 不能添加list, dict可变对象,但是可以用tuple;添加已经有的元素不会报错,但是没有效果。
二.插入多个元素
s1.update(date) : date可以使list, str, tuple 但是是将其中的元素打乱逐个添加,也可能有添加后有顺序。
3.删除元素:s1.remove(date) : 删除其中的date元素
4.遍历:
for i in set:
print(i)
5.集合的运算(都是形成新的集合):
一.交集:
s1 = s2 & s3
二.并集:
s1 = s2 | s3
6.与list 和 tuple的转换:
s1 = set(lsit)
list1 = list(s1)
s2 = set(tuple)
tuple1 = tuple(s2)
应用场景:用来对list和tuple中的元素去重
字典的操作:
1.get(key): 查看dict中是否有key值,有返回True, 否则返回 False
2.下标访问:print(dict[key]) #这样没有key的话会报异常
3.添加数据:dict[key] = date; # 如果之前字典中没有key值,就是添加数据;若有的话,就是覆盖之前存在的数据。
4.删除数据:dict.pop(key): 删除key链接的value
5.字典遍历:
一.键值key的遍历:
for key in dict:
print(key)
二.value值的遍历:
for value in dict.values():
print(yalue)
三.键值和vaule值的遍历:
for k, v in dict.item():
print(k, v)
四.下标和value值的遍历(不常用):
for i, v in enumerate(dict):
print(i, v)
6.与list的对比:
一.查找和插入的速度非常快,并且不会随着数据的增多而变慢
二.浪费内存空间