集合的使用
- 集合是一个不重复的无序的集合,可以用大括号或者 set 来表示
- {} 有两种意思:字典;集合
- {}中如果放的是键值对,他就是一个字典;如果 {} 中放的是单个的值,就是个集合
person = {'name':'zhangsan','age':'18'} # 字典
x = {'hello','good',18} # 集合
# 集合有自动去重的功能
name = {'zhangsan','lisi','wangwu','zhangsan','jack','tony','lisi'}
print(name) # {'wangwu', 'jack', 'lisi', 'tony', 'zhangsan'}
# set 可以进行增删改查的方法,但是不常用,add,pop(随机删除一个元素),remove(删除一个指定元素,没有就报错),clear(清空集合),union(将多个集合合并,生成一个新的集合),update(将一个集合拼接到指定的集合中)
name.add("liuziheng") # 增加
print(name) # {'jack', 'liuziheng', 'lisi', 'wangwu', 'zhangsan', 'tony'}
name.clear() # 清空一个集合
print(name) # set() 注意! 一个 {} 表示的是一个空字典,空集合用 set()来表示
集合的高级使用
- set 支持很多算数运算符
- set 不支持加法
- - 减法可以求两个集合的差集
- & 可以求两个集合的交集
first = {'李白','白居易','李清照','杜甫','王昌龄','王维','孟浩然','王安石'}
second = {'李商隐','杜甫','李白','白居易','岑参','王昌龄'}
# 求first和second的差集
print(first - second) # {'王维', '王安石', '孟浩然', '李清照'} first有second没有
print(second-first) # {'岑参', '李商隐'} second有first没有
# 求first和second的交集
print(first & second) # {'王昌龄', '白居易', '杜甫', '李白'}
# 求first和second的并集
print(first | second) # {'王维', '白居易', '李商隐', '王安石', '岑参', '孟浩然', '杜甫', '李白', '王昌龄', '李清照'}
# 求first和second的差集的并集,first有second没有加上second有first没有
print(first ^ second) # {'李清照', '王维', '李商隐', '王安石', '岑参', '孟浩然'}
集合的练习
- 对如下的列表进行去重并排序
nums = [5,8,7,6,4,1,3,5,1,8,4]
nums = set(nums)
nums = list(nums)
nums.sort()
print(nums)
- Python中,存在一个内置函数可以执行字符串里面的代码
- eval
a = "print('this is a eval test')"
eval(a) # this is a eval test
- json:json的本质是个字符串
- json可以把列表,元组,字典等转换为json字符串
# json dumps loads
# python -> json
# 字符串 -> 字符串
# 字典 -> 对象
# 列表/元组/集合 -> 数组
import json
person = {'name':'zhangsan','age':'18','gender':'female'}
m = json.dumps(person)
print(m)
print(type(m))
# {"name": "zhangsan", "age": "18", "gender": "female"}
# <class 'str'>
# 转换后不能再像字典一样根据key查找value
# 如何把一个字符串变成字典
n = '{"name": "zhangsan", "age": "18", "gender": "female"}'
p = eval(n)
print(p) # {'name': 'zhangsan', 'age': '18', 'gender': 'female'}
print(type(p)) # <class 'dict'>
s = json.loads(n)
print(s) # {'name': 'zhangsan', 'age': '18', 'gender': 'female'}
print(type(s)) # <class 'dict'>