day09-集合

2024-01-23 08:27:46 浏览数 (2)

集合(Set)是一种可变、无序的数据类型,集合中的元素是唯一的,不重复的

诶?我们之前讲过的字典也是同样的可变,无序的数据类型,但是字典是键值对的存储形式,而集合不是

1、初识集合

集合使用大括号 {} 包裹着,元素之间使用逗号 分隔,集合中的元素可以是字符串、数字、元祖等其他任何不可变数据类型。

代码语言:javascript复制
# 字典例子
set = {1, 2, '3', (1, 2)}

print(set)

集合里的元素不能放可变数据类型,必须是不可变的数据元素

2、创建集合

使用{ }创建

代码语言:javascript复制
set = {1, 2, 3, 4, 5}
print(set)

# 输出结果
{1, 2, 3, 4, 5}

直接使用花括号创建的字典,那突然有个问题,创建空集合使用{}可以用吗? set2 = {} print(set2,type(set2)) # 输出结果 {} <class 'dict'>

结果是字典类型,说明使用{ }创建的是空字典

使用set() 函数

set() 是一个内置函数,用于创建一个集合。set() 函数可以接受一个可迭代对象作为参数,并将其转换为一个集合。如果没有提供参数,则返回一个空集合。

可迭代对象有字符串,列表,元祖,字典,集合

1、创建空集合

代码语言:javascript复制
my_set = set()
print(my_set, type(my_set))

# 输出结果
set() <class 'set'>

2、集合里放字符串

代码语言:javascript复制
my_set = set('hello')
print(my_set, type(my_set))

# 输出结果
{'l', 'o', 'h', 'e'} <class 'set'>

3、集合里放列表

代码语言:javascript复制
my_set = set([1, 2, 3, 4])
print(my_set, type(my_set))

# 输出结果
{1, 2, 3, 4} <class 'set'>

4、集合里放元祖

代码语言:javascript复制
my_set = set((1, 2, 3, 4))
print(my_set, type(my_set))

# 输出结果
{1, 2, 3, 4} <class 'set'>

5、集合里放字典

代码语言:javascript复制
my_set = set({"1": 1, "2": 2, "3": 3})
print(my_set, type(my_set))

# 输出结果
{'3', '2', '1'} <class 'set'>

集合里元素是不可变元素,上述是使用set()函数可以把列表和字典转换为集合元素,而因为字典中键是不可变的,所以使用set函数放入字典,只会转换字典的键

3、集合特性

集合最大的特性是元素是唯一的,不允许重复

唯一性

举例说明:

代码语言:javascript复制
my_set = {1, 2, 3, 2, 3, 5}
print(my_set)

猜猜打印结果是什么

输出结果:{1, 2, 3, 5}

集合不允许有重复元素,后边可以帮助我们去重

无序性

表示我们无法通过索引取值my_set[0] 会报错

列表和集合的区别

1、列表是[ ],集合是{ }

2、列表是有序的,可索引取值,集合是无序的,不可索引取值

3、列表可以放重复的元素,集合元素是唯一的,不会重复

4、集合增删改查

  • 使用 add() 方法添加单个元素到集合中。
  • 使用 update() 方法添加多个元素到集合中。
代码语言:javascript复制
my_set = {1, 2, 3}
my_set.add(4)  # 添加单个元素
my_set.update({5, 6})  # 添加多个元素
print(my_set)  # 输出:{1, 2, 3, 4, 5, 6}

  • 使用 remove() 方法删除指定的元素。如果元素不存在,会引发 KeyError 错误
  • 使用 discard() 方法删除指定的元素。如果元素不存在,不会引发错误
  • 使用 pop() 方法删除并返回集合中的任意一个元素
代码语言:javascript复制
my_set = {1, 2, 3, 4, 5, 6}
my_set.remove(4)  # 删除指定元素
my_set.discard(5)  # 删除指定元素
print(my_set)  # 输出:{1, 2, 3, 6}

popped_element = my_set.pop()  # 删除并返回任意一个元素
print(popped_element)  # 输出:1

clear() 也可以清空集合

集合中的元素是不可变的,所以不能进行修改

同样,集合无序的,所以也无法查询

不过我们可以通过in方法键字可以判断一个元素是否存在于集合中,如果有返回true,否则返回False

代码语言:javascript复制
my_set = {1, 2, 3, 4, 5}
print(3 in my_set)  # 输出:True
print(6 in my_set)  # 输出:False

5、集合常见方法

len(set)

代码语言:javascript复制
my_set = {1, 2, 3, 4, 5}

print(len(my_set))  # 5

max(set)

代码语言:javascript复制
my_set = {1, 2, 3, 4, 5}

print(max(my_set))  # 5

min(set)

代码语言:javascript复制
my_set = {1, 2, 3, 4, 5}

print(min(my_set))  # 1

如果集合中有不可比较的元素,会提示报错

6、集合的交集,并集,差集

union()

返回两个集合的并集。合并并去重

代码语言:javascript复制
# union
set1 = {1, 2, 3}
set2 = {3, 4, 5}
print(set1.union(set2))

# 输出结果
{1, 2, 3, 4, 5}

intersection()

返回两个集合的交集,共同的元素

代码语言:javascript复制
intersectionset1 = {1, 2, 3}
set2 = {3, 4, 5}
print(set1.intersection(set2))
# 输出结果{3}

difference()

从源集合中找出目标集合中没有的元素集合

代码语言:javascript复制
a= {1, 2, 3, 4}
b = {2, 3, 5}
print(a.difference(b))
# 输出结果{1, 4}

day09练习

初级

1.创建一个空集合

2.声明一个集合computer,包含如下元素computer = {"apple", "xiaomi", "huawei"}

3.计算2题中集合的长度并且打印输出

4.添加"vivo"到集合computer中

5.一次添加"oppo","meizu"到集合computer中

6.使用两种方法在集合computer移除一家公司,remove()discard(),两者之间有什么不同?

中级

有a集合和b集合,信息如下:

代码语言:javascript复制
string1 = "hello"
string2 = "world"

1.连接a集合和b集合,并输出新集合

2.找出a集合和b集合的交集

3.找出a集合在b集合中没有的集合元素

高级

1.有如下两个字符串,找出如下字符串中共同包含的字符,输出打印

代码语言:javascript复制
string1 = "hello"
string2 = "world"

2.有如下字符串,找出该字符串唯一的单词集合,并且输出唯一的单词列表

代码语言:javascript复制
string = 'I am astring and I am anotherstring and I am the laststring'

3.有如下列表,找好该列表中每个元素及其出现的次数。(可学完循环和判断在做该题)

List = [1, 2, 2, 3, 3, 3, 4, 5]

要求:以字典的形式输出,比如输出:{1: 3, 2: 1, 3: 2}

0 人点赞