集合(set)是一个无序的不重复元素序列。
1). 使用大括号 { } 或者 set() 函数创建集合;
2). 注意:创建一个空集合必须用 set() 而不是 { } , { } 是用来创建一个空字典的。
实例:s1 = {1,2,3,'hello',(1,2,3),[1,2,3]} 可以定义成功吗?
这个是不能定义成功的,因为集合里面不能存储可变的数据类型 列表,所以定义不成功。
1)集合的增加(.add .update)
.add :添加一个元素到集合里面
.update:添加多个元素到集合中
2)集合的删除(.remove .discard .pop .clear)
.remove:删除指定的元素, 如果元素不存在, 则报错
.discard:删除指定的元素, 如果元素不存在, 则什么也不做
.pop:随机删除集合中的元素
.clear:将集合元素清空
有一点需要值得注意的是,如果要对集合排序, 需要先转成列表(因为集合是无序的),操作如下:
# 如果要对集合排序, 需要先转成列表;
nums = {2, 3, 1, 2, 3, 5, 7, 8, 3, 22, 2}
nums = list(nums)
# 默认从小到大进行排序, reverse=True由大到小进行排序;
nums.sort(reverse=True)
print(nums)
输出结果:
1)交集
set1.intersection(set2):求集合1与集合2的交集
set1 & set2:求集合1与集合2的交集的另一种方法
set2.intersection_update(set1):求集合1和集合2的交集, 并更新集合1为交集的内容
2)并集
set1.union(set2):求集合1与集合2的并集
set1 | set2:求集合1与集合2的并集的另一种方法
3)差集(集合本身 - 交集)
set1.difference(set2):集合1除去和集合2相同的部分,就是集合1与集合2的差集
set1 - set2:与上含义相同,是求差集的另一种方法
4)对等差分(并集 - 交集)
set1.symmetric_difference(set2):集合1与集合2的并集再减去它两个的交集部分,就是对等差分
set1 ^ set2:与上含义相同,是求对等差分的另一种方法
5)判断
set1.issubset(set2):集合1是否包含于集合2
set1.issuperset(set2):集合1是否包含集合2
set1.isdisjoint(set2):判断两个集合是否包含相同的元素,如果不包含则返回True,否则就返回False。
因为集合是无序的,所以不支持列表和元组拥有的特性,但是成员操操作符(in,not in)是可以用的。
字典是另一种可变容器模型,且可存储任意类型对象。
键(key)一般是唯一的,如果重复最后的一个键值对会替换前面的,值(value)不需要唯一。
字典是由键值对组成(key-value) 其形式为:d = {key1 : value1, key2 : value2 }(冒号前面的值叫做键key, 冒号后面的值叫做值value)
1)简单字典创建
注意:字典是不支持索引和切片的
2)内建方法:fromkeys
根据序列依次创建多个key-value对, key值是序列的每个元素,value相同(如果没有指定, 全为None;如果指定了, 为指定的内容)
例如:
3)zip间接创建
例如:
4)dict工厂函数创建
例如:
users = dict(name="粉条", age=10, gender='male')
print(users)
输出为:{'name': '粉条', 'age': 10, 'gender': 'male'}
1)字典的键值对增加(.services .setdefault .update)
直接根据key值增加,如果key不存在, 增加键值对; 如果key已经存在, 更新key对应的value值
.setdefault:如果key不存在, 增加键值对; 如果key已经存在,不做任何操作
.update:(和第一种方法类似但有区别: 可以一次更新多个键值对) 如果key不存在, 增加键值对; 如果key已经存在, 更新key对应的value值
2)字典的键值对删除(del .pop .popitem .clear)
del:删除对应的键值对
.pop:删除对应的键值对, 并返回对应的value值, 可以保存并使用
.popitem:随机删除字典的key-value值
.clear:将字典中的所有键值对清空
3)字典的查看(.keys .values .items)
.keys:查看所有的key值
.values:查看所有的value值
.items:查看所有的键值对,并以列表嵌套元组的形式输出。
方法一:根据key值获取value值:dic [key]
如果key值存在, 返回value值;
如果key值不存在, 报错。
例如:
gradeDic = {'A': "优秀", 'B': "良好", 'C': "及格"}
grade = input("请输入等级:")
if grade in gradeDic:
print(gradeDic[grade])
else:
print("无效的成绩")
结果为:
方法二:根据key值获取value值: dic.get(key)
如果key值存在, 返回value值;
如果key值不存在,返回None或者你指定的默认值
例如:
gradeDic = {'A': "优秀", 'B': "良好", 'C': "及格"}
grade = input("请输入等级:")
print(gradeDic.get(grade, "无效的成绩"))
结果为与方法一相同:
1)遍历字典, 默认遍历的是字典的key值
d = dict(name='fentiao', age=10)
# 默认遍历字典只遍历key值;
for item in d:
print(item)
输出结果为:
name
age
2)遍历字典的所有value值
d = dict(name='fentiao', age=10)
for value in d.values():
print(value)
输出结果为:
fentiao
10
3)获取字典的key-value对
d = dict(name='fentiao', age=10)
for key,value in d.items():
print(key, '->', value)
输出结果为:
name -> fentiao
age -> 10
collections.defaultdict类,本身提供了默认值的功能, 默认值可以是整型,列表,集合等。
1). 字典是一种关联容器,每个键都映射到一个单独的值上。如果想让键映射到多个值,需要将这些多个值保存到容器(列表或者集合)中。
2). 利用collections模块中的defaultdict类自动初始化第一个值,这样只需关注添加元素。
例如:
from collections import defaultdict
# 创建一个空字典, 所有的value值默认是空列表[]
dict1 = defaultdict(list)
# 判断‘a’这个key值是否存在, 如果不存在, 返回[], .append, 在空列表后面追加元素1;
dict1['a'].append(1)
# 判断‘a’这个key值是否存在, 如果存在, 获取value值, .append, 在原有的value值后面追加元素1;
dict1['a'].append(2)
dict1['b'].append(4)
print(dict1)
# 创建一个空字典, 所有的value值默认是空集合set()
dict1 = defaultdict(set)
# 判断‘a’这个key值是否存在, 如果不存在, 返回set(), .add, 在空列表后面追加元素1;
dict1['a'].add(1)
# 判断‘a’这个key值是否存在, 如果存在, 获取value值, .add, 在原有的value值后面追加元素1;
dict1['a'].add(2)
dict1['b'].add(4)
print(dict1)
输出结果为:
1)
2)
3)