集合set的定义
广义的集合的概念:某些指定的对象集在一起就成为一个集合,其中每一个对象叫元素,包含列表元组字典.
格式:集合名 ={ 元素1,元素2,…….}
例:my _set={1,3,5}
集合是无序的->不支持下标索引
集合是可变的数据类型
集合中的元素是唯一的
集合一般用于元组或者列表中的元素去重
定义一个空的集合 my_set=set()
注意:my_set = {} 这样的写法为一个空字典
定义空集合
my_set = set()
#定义空字典
my_dict = dict()
my_dict1 = {}
#定义空元组
my_tuple = tuple()
my_typle = ()
#定义空列表
my_list = []
my_list = list()
""
格式:集合名 ={ 元素1,元素2,…….}
#定义一个集合---->有一个字典,我们将这个字典所有的key取出来,放到一个新的数据形式中
集合的元素不能重复 和字典的键很像
集合的元素,只能是数字、字符串、元组
不能是列表、字典
"""
my_set = set() #定义空集合
my_set = {} #这是字典
print(type(my_set))
#my_set2 = {1,2,3,4,5}
#集合是无序的,不能通过下标索引的形式 单独的取值
#print(my_set2[0])#'set' object is not subscriptable 可下标访问的
my_set3 = {1,2,3,44,44,5}#集合有去重的功能,集合中的元素是不能重复的
print(my_set3) #{1,2,3,5,44} 集合将重复的值去掉了
#集合中的元素的数据类型有哪些?
my_set4 = {"1","2","3","4","4"}
print(my_set4)
my_set5 = {(1,2),("3","4")}
print(my_set5)
#my_set6 = {[1,2,3],[1,2]}#集合的元素不能是列表 unhashable type: 'list'
#print(my_set6)
#my_set7 = {{1:2},{3:4},{5:6}} #集合的元素不能是字典 unhashable type: 'dict'
#print(my_set7)
集合的常见操作
.add-增加元素
#定义一个空集合
s1 = set()
#往里面 添加元素
s1.add("小猪佩奇")
s1.add("lucy")
s1.add("lily")
print(s1) #集合的元素是无序的
.update-----可以添加多个元素
#定义一个空集合
s1 = set()
#往里面 添加元素
s1.add("小猪佩奇")
s1.add("lucy")
s1.add("lily")
print(s1) #集合的元素是无序的
tuple1 = ("林志玲","言承旭")
set2 = {"张三","李四"}
list3 = ["武松","宋江"]
dict4 = {"dict_key":"dict_value",}
s1.update(tuple1)
print(s1)
s1.update(set2)
print(s1)
s1.update(list3)
print(s1)
s1.update(dict4) #如果update操作的是字典 添加的元素是字典的键
print(s1)
str1 = "alex"
s1.update(str1) #会将字符串拆分成单个字符 分别添加到集合中
print(s1)
.remove-如果元素存在则删除,不存在则报错:KeyError
s1.add("小猪佩奇")
s1.add("lucy")
s1.add("lily")
list3 = ["武松","宋江"]
s1.update(list3)
print(s1)
s1.remove("武松")
print(s1)
s1.remove("铁牛") # 如果元素存在则删除,不存在则报错:KeyError:
print(s1)
.pop-随机删除
s1.add("小猪佩奇")
s1.add("lucy")
s1.add("lily")
print(s1) #集合的元素是无序的
#.pop #随机删除
s1.pop()
print(s1) #每次删除的值都是不一样的
.discard-类似remove移除不存在的元素的时候不会报错
s1.add("小猪佩奇")
s1.add("lucy")
s1.add("lily")
list3 = ["武松","宋江"]
s1.update(list3)
print(s1)
s1.discard("宋江")
s1.discard("李逵") # 如果元素不存在,不会报错
print(s1)
.clear-清空
s1.add("小猪佩奇")
s1.add("lucy")
s1.add("lily")
print(s1) #集合的元素是无序的
s1.clear()
print(s1)
练习
"""
练习:1 产生10个1-20的随机数,去除里面的重复项
2 健盘输入一个元素,将此元素从不重复的集合中删除
"""
import random
#产生10个 1-20 的随机数
list1 = []
for i in range(10):
list1.append(random.randint(1,20))#1-20的随机数
print(list1)
#去除里面的重复项 将列表转换成集合
set1 = set(list1)
print(set1)
#输入一个元素:
element = input("请输入一个1-20的数字:")
result = set1.discard(element)
print(f"最后操作的结果为:{set1}")
"""
练习:1 产生10个1-20的随机数,去除里面的重复项
2 健盘输入一个元素,将此元素从不重复的集合中删除
"""
import random
#产生10个 1-20 的随机数
set1 =set ()
for i in range(10):
#创建一个随机数
rand = random.randint(1,20)
set1.add(rand)
print(set1)
#输入一个元素:
element = input("请输入一个1-20的数字:")#1
result = set1.discard(element)
print(f"最后操作的结果为:{set1}")
集合的其他操作
set1=set()
set2={2,3,4,5,6}
set3 ={2,3,4,5,6}
print(set2)
print(set3)
print(6 in set1)
print(6 in set2)
print(set2==set3) #值相同
print(set2 is set3) #但是内存不相同
set1=set()
set2={"2","3","4","5","6"}
set3 ={"2","3","4","5","6"}
print(set2)
print(set3)
print("6" in set1)
print("6" in set2)
print(set2==set3) #值相同
print(set2 is set3) #但是内存不相同
print(id(set2))
print(id(set3))
集合不支持 + *
集合-差集 .difference() -
set1 ={1,2,3,4}
set2={3,4,5,6}
#set5 = set1 ^ set2 #{1, 2, 5, 6}
#set5 = (set1 | set2) - (set1 & set2) #{1, 2, 5, 6}
set5 = set1.symmetric_difference(set2) #{1, 2, 5, 6}
print(set5)
集合-交集 intersection() &
set1 ={1,2,3,4}
set2={3,4,5,6}
#set3 = set1 & set2
set3 = set1.intersection(set2)
print("set1和set2的交集是{}".format(set3))
集合-并集 .union() |
集合-对称差集 用两个集合的并集减去他们的交集 .symmetric_difference()
set1 ={1,2,3,4}
set2={3,4,5,6}
#set5 = set1 ^ set2 #{1, 2, 5, 6}
#set5 = (set1 | set2) - (set1 & set2) #{1, 2, 5, 6}
set5 = set1.symmetric_difference(set2) #{1, 2, 5, 6}
print(set5)
可变和不可变类型
不可变类型,内存中的数据不允许被修改:
数字类型int bool float.complex.long(2.x)
字符串 str
元组tuple
可变类型,内存中的数据可以被修改
列表 list
字典dict
集合/frozenset()除外,frozenset()返回一个冻结的集合,冻结后集合不能再添加或删除任何元素
注意
可变类型的数据变化,是通过方法来实现的
如果给一个可变类型的变量,赋值了一个新的数据,引用会被修改
变量不再对之前的数据引用
变量改为对新赋值的数据引用
"""
可变和不可变类型
字典的键 必须是 数字、字符串、元组
数字、字符串、元组 是不可变类型 当变量的id不发生改变的时候,它的值是不能变的!
列表、字典都是可变类型: 当id不发生改变的时候,它的值是可以改变的
字典的键 必须使用不可变类型的变量
集合(set)的元素,必须使用不可变类型的变量
"""
a = 5
b = a
print(b)
b = 777
#a等于多少?
print(a)
a = [1,2,3,4,5]
b =a
print(b)
b.append(777)
#a等于多少?
print(a)
数据类型转换
str()→int() list() set() tuple()
str()←int() list() set() tuple()
list()→set() tuple() dict() #转换成字典,元素要有固定的格式
dict()→list() #只能保存字典的键
str_1 = "hello_Kitty !"
list1 = list(str_1) # 将字符串的每个元素拆开,储存到 列表中
print(list1)
tuple1 = tuple(str_1) # 将字符串的每个元素拆开,储存到 元组中
print(tuple1)
set1 = set(tuple1) # 将字符串的每个元素拆开,储存到 集合中,并且 会进行去重
print(set1)
print(list1) # ['h', 'e', 'l', 'l', 'o', '_', 'K', 'i', 't', 't', 'y', ' ', '!']
str2 = str(list1)
print(str2) # str2 = "['h', 'e', 'l', 'l', 'o', '_', 'K', 'i', 't', 't', 'y', ' ', '!']"
print(str2[:3]) #切片