集合定义与操作
#集合
list1=[3,5,8,9,1,3,8,9]
print(list1)#[3, 5, 8, 9, 1, 3, 8, 9]
#1.声明集合:空集合只能用set() 不能用{},非空集合两者都可用
s1=set()
print(type(s1))#<class 'set'>
s2={}
print(type(s2))#<class 'dict'>
s2={2,4,5,7,2,7,8}
print(type(s2))#<class 'set'>
#{}声明字典:{key:val,key:val,key:val}
#{}声明集合:{ele,ele,ele}
print(s2)#不重复特点,自动去重#{2, 4, 5, 7, 8}
#2.增删改查
#2.1增加
# add()添加一个 update()添加多个
s1=set()
s1.add('hello')
s1.add('小猪佩奇')
s1.add(3)
print(s1)#无序 {'hello', 3, '小猪佩奇'}
#update
t1=('林志玲','言承旭')#元组
s1.update(t1)#效果类似添加多个
print(s1)#{3, '小猪佩奇', '林志玲', '言承旭', 'hello'}
s1.add(t1)
print(s1)#{3, ('林志玲', '言承旭'), 'hello', '言承旭', '小猪佩奇', '林志玲'}
#2.2 删除
# remove 元素存在则删除,不存在则报错
# discard() 类似remove() 但是在移除不存在元素时不报错
# pop 删得是第一个元素,与之前相反了
# clear 清空所有内容
s1.remove('言承旭')
print(s1)#{3, ('林志玲', '言承旭'), 'hello','小猪佩奇', '林志玲'}
print(s1.discard('44444'))#None
s1.pop()
print(s1)#{('林志玲', '言承旭'), 'hello','小猪佩奇', '林志玲'}
例子
'''
1.产生10个1~20得随机数,去除里面重复元素
2.键盘输入一个元素,将此元素从不重复得集合中删除
'''
import random
list1=[]
for i in range(10):#这种方法只给10次机会,你很可能去重后得不到10个,可以用while
ran=random.randint(1,20)
list1.append(ran)
set1=set(list1)
print(list1)
print(set1)
num=int(input('输入一个数字'))
set1.discard(num)
print('输出之后:',set1)
'''
[20, 6, 5, 7, 2, 4, 3, 14, 12, 14]
{2, 3, 4, 5, 6, 7, 12, 14, 20}
输入一个数字14
输出之后: {2, 3, 4, 5, 6, 7, 12, 20}
'''
list3=[]
set2=set()
for i in range(10):
ran=random.randint(1,20)
set2.add(ran)
print(set2)#{2, 4, 5, 6, 11, 15, 16, 18}排序不重复
list2=[]
i=0
while i<=10:
ran=random.randint(1,20)
if ran not in list2:
list2.append(ran)
i+=1
print(list2)
print(set(list2))
'''
[11, 14, 13, 1, 6, 12, 20, 2, 3, 19, 8]
{1, 2, 3, 6, 8, 11, 12, 13, 14, 19, 20
'''
其他符号操作
#其他:符号操作
'''
in
not in
==
'''
set1={1,4,5,7,9,11}
print(7 in set1)#True
set2={1,4,5,7,9,11}
print(set1==set2)#True
set3={1,4,5,7,9,11,0}
print(set1==set3)#False
# set4=set2+set3 不支持+
# set5=set2*2 不支持*
#支持 差集1.- 2.difference()
set5=set3-set2# 差集
print(set5)#{0}
set5=set2-set3
print(set5)#set()空集合
set6={1,2,3,4,5}
set7={1,2}
print(set6.difference(set7))#{3, 4, 5}
print("set6.difference",set6)#set6.difference {1, 2, 3, 4, 5}
set6.difference_update(set7)
print("difference_update",set6)#difference_update {3, 4, 5}
# 交集1. & 2.intersection
print(set6&set7)#{1, 2}
print(set6.intersection(set7))#{1, 2}
# 并集1. | 2.union()
set1={1,4,7,8,9}
set2={1,4,5,0}
print(set1|set2)#{0, 1, 4, 5, 7, 8, 9}
print(set1.union(set2))#{0, 1, 4, 5, 7, 8, 9}
set9={4,6,9,2,11,66}
print(set9)#{2, 66, 4, 6, 9, 11}直接这样不帮我排序,也不是按添加顺序
'''
已知两个列表:
l1=[5,1,2,9,0,3]
l2=[7,2,5,7,9]
找出两个列表得不同元素(两个人各自有的存在一起)
找出两个列表得共同元素
|并集 &交集 -差集
'''
l1=[5,1,2,9,0,3]
l2=[7,2,5,7,9]
s1=set(l1)
s2=set(l2)
print(s1|s2)#{0, 1, 2, 3, 5, 7, 9}
print(s1&s2)#{9, 2, 5}
#对称差集方式一
result=(s1|s2)-(s1&s2)#两人全部有的-两人共同有的==两人各自有的
print(result)#{0, 1, 3, 7}
#对称差集方式二
print(s1^s2)#{0, 1, 3, 7}
总结
'''
回顾:
数据类型:
1.字符串:
声明:
''
""
''' '''
符号:
+
*
in
not in
is 比较的是两个对象的id值是否相等,也就是比较俩对象是否为同一个实例对象,是否指向同一个内存地址。
== 比较的是两个对象的内容是否相等,默认会调用对象的__eq__()方法。
is not
[]
获取字符串元素:
s='hello'
s[0]~s[len(s)-1]
切片获取:
s[start:end[:step]] 左闭右开
内置函数
lower() upper()
max() min()
len()
replace()
split() 切割成列表 join() 合并列表
find() rfind() lfind()
strip() 去除空格 lstrip rstrip()
a1='h'
a2='e'
a3='hello'
a4='hello'
print(a1+a2)#he
print(a1*2)#hh
print(a1 in a3)#True
print(a2 not in a3)#False
print(a3==a4)#True
print(a3 is a4)#True
print(a3 is not a4)#False
容器
2.列表:list 保存多个元素,有序,可以通过下标找对应得元素
可以修改(增删改查)
内置函数:
增加:append() extend() insert()
删除:remove() pop() clear() del
sort() reverse() index() count()
3.元组:tuple 保存多个元素,
不可以修改(只能查)
内置函数:
index() count()
支持下标操作
t=(1,2)
t[0],t[:]
4.字典:dict 保存键值对,键唯一,值可以不唯一
可以支持对键值对得增删改查
内置函数:
增加/修改元素: dict1={} dict1[key]=value
删除:dict1.pop() dict1.popitem()
dict1.clear()
查询:items() values() keys()
5.集合: set 无序不重复序列
作用:去重
符号:- & | ^
增加:add() update()
删除:remove() discard() pop() clear()
运算:差集-difference() 交集&intersection() 并集|union() 对称差集 ^symmetric_difference()
'''
可变与不可变
集合也是可变得,改变前后是同一个内存空间
类型转换
#类型转换
#str() int() list() dict() set() tuple()
#1.str---->int,list,set,tuple
s='8'
i=int(s)
print(i)#8
s='abc'
l=list(s)
print(l)#['a', 'b', 'c']
s=set(s)
print(s)#{'c', 'b', 'a'}
t=tuple(s)
print(t)#('c', 'a', 'b')
#2.int,list,set,tuple,dict---->str
i=8
s=str(i)
print(s,type(s))#8 <class 'str'> 实际上他在外层包裹了一个引号
l=str(['a','b','c'])
print(l,type(l))#['a', 'b', 'c'] <class 'str'>
#...
#容器类相互转换
#3.list--->set(),tuple(),也可转成字典,但是有条件,必须是[(key,val),(key,val)]
list1=[1,3,4]
print(set(list1))#{1, 3, 4}
print(tuple(list1))#(1, 3, 4)
list2=[(1,'a'),(2,'b')]
print(dict(list2))#{1: 'a', 2: 'b'}
#4.tuple-->list
tuple=(1,2,3,4)
print(list(tuple))#[1, 2, 3, 4]
#5.set--->list
set1={1,2,3}
print(list(set1))#[1, 2, 3]
#6.dict-->list 只把key保存到list中
dict1={1:'a',2:'b'}
print(list(dict1))#[1, 2]