【Python基础】Python数据容器(集合)

文章目录

  • 数据容器:set(集合)
    • 集合的定义
    • 集合的常用操作-修改
      • (1)添加新元素
      • (2)移除元素
      • (3)从集合中随机取出元素
      • (4)清空集合
      • (5)取出 两个集合的差集
      • (6)消除 两个集合的差集
      • (7)两个集合 合并
      • (8)统计集合元素数量len()
      • (9)集合的遍历
    • 集合的特点

数据容器:set(集合)

  • 为什么使用集合?

    通过特性来分析:

    • 列表可修改、支持重复元素 且 有序
    • 元组、字符串不可修改、支持重复元素且有序

    局限:它们都支持重复元素

    如果场景需要对内容做去重处理,列表、元组、字符串就不方便了

    而集合,最主要的特点就是:不支持元素重复(自带去重功能)、并且内容无序

集合的定义

基本语法:

# 定义集合字面量
{元素, 元素, ..., 元素}
# 定义集合变量
变量名称 = {元素, 元素, ..., 元素}
# 定义空集合
变量名称 = set()

和列表、元组、字符串等定义基本相同:

  • 列表:[]
  • 元组:()
  • 字符串:“”
  • 集合:{}
# 定义集合
my_set = {"hi", "hello", "python", "hi", "hello", "python", "hi", "hello", "python"}
my_set_empty = set()  # 定义空集合
print(f"my_set的内容是:{my_set},类型是{type(my_set)}")
print(f"my_set_empty的内容是:{my_set_empty},类型是{type(my_set_empty)}")

运行效果:
my_set的内容是:{'hi', 'python', 'hello'},类型是<class 'set'>
my_set_empty的内容是:set(),类型是<class 'set'>

集合的常用操作-修改

因为集合是无需的,所以集合不支持:下标索引访问

但是集合和列表一样,是允许修改的,所以我们来看看集合的修改方法

(1)添加新元素

语法:集合.add(元素) 将指定元素,添加到集合内

结果:集合本身被修改,添加了新元素

# 添加元素
my_set = {"hi", "hello", "python"}
my_set.add("你好")
my_set.add("python")
print(f"my_set添加元素后的结果是:{my_set}")

运行效果:
my_set添加元素后的结果是:{'python', 'hi', '你好', 'hello'}

(2)移除元素

语法:集合.remove(元素) 将指定元素,从集合内移除

结果:集合本身被修改,移除了元素

# 移除元素
my_set = {"hi", "hello", "python"}
my_set.remove("hi")
print(f"移除结果:{my_set}")

运行效果:
移除结果:{'python', 'hello'}

(3)从集合中随机取出元素

语法:集合.pop() 从集合中随机取出一个元素

结果:会得到一个元素的结果。同时集合本身被修改,元素被移除

# 随机取出一个元素
my_set = {"hi", "hello", "python"}
element = my_set.pop()
print(f"集合被取出的元素是:{element},取出元素后:{my_set}")

(4)清空集合

语法:集合.clear() 清空集合

结果:集合本身被清空

# 清空集合 clear
my_set.clear()
print(f"集合被清空啦,结果是:{my_set}")

(5)取出 两个集合的差集

语法:集合1.difference(集合2) 以集合1为基准,取出集合1和集合2的差集(集合1有 而集合2没有的)

结果:得到一个新集合,集合1和集合2不变

# 取出两个集合的差集
set1 = {1, 2, 3}
set2 = {1, 5, 6}
set3 = set1.difference(set2)
print(f"取出差集后的结果是:{set3}")
print(f"取差集后,原有set1的内容:{set1}")
print(f"取差集后,原有set2的内容:{set2}")

运行效果:
取出差集后的结果是:{2, 3}
取差集后,原有set1的内容:{1, 2, 3}
取差集后,原有set2的内容:{1, 5, 6}

(6)消除 两个集合的差集

语法:集合1.difference_update(集合2)

功能:对比集合1 和 集合2,在集合1内,删除和集合2相同的元素

结果:集合1被修改,集合2不变

# 消除 两个集合的差集
set1 = {1, 2, 3}
set2 = {1, 5, 6}
set3 = set1.difference_update(set2)
print(f"消除差集后的结果是:{set3}")
print(f"取差集后,原有set1的内容:{set1}")
print(f"取差集后,原有set2的内容:{set2}")

运行效果:
消除差集后的结果是:None
取差集后,原有set1的内容:{2, 3}
取差集后,原有set2的内容:{1, 5, 6}

(7)两个集合 合并

语法:集合1.union(集合2)

功能:将集合1和集合2组合成新集合

结果:得到新集合,集合1和集合2不变

# 两个集合合并
set1 = {1, 2, 3}
set2 = {1, 5, 6}
set3 = set1.union(set2)
print(f"合并后的结果是:{set3}")
print(f"此时原有set1的内容:{set1}")
print(f"此时原有set2的内容:{set2}")

运行效果:
合并后的结果是:{1, 2, 3, 5, 6}
此时原有set1的内容:{1, 2, 3}
此时原有set2的内容:{1, 5, 6}

(8)统计集合元素数量len()

语法:len(集合)

功能:语法:得到一个正式,记录了集合的元素数量

# 统计集合元素数量len()
set1 = {1, 2, 3, 4, 5}
num = len(set1)
print(f"集合1内元素的数量有:{num}个")

set2 = {1, 2, 3, 4, 5, 1, 2, 3, 4, 5}
num = len(set2)
print(f"集合2内元素的数量有:{num}个,集合内容是:{set2}")

运行效果:
集合1内元素的数量有:5个
集合2内元素的数量有:5,集合内容是:{1, 2, 3, 4, 5}

(9)集合的遍历

集合不支持下标索引,不能用while循环

可以用for循环

# 集合的遍历
# 集合不支持下标索引,不能用while循环
# 可以用for循环
set1 = {1, 2, 3, 4, 5}
for element in set1:
    print(f"集合中的元素:{element}")

集合的特点

  • 可以容纳多个数据

  • 可以容纳不同类型的数据(混装)

  • 数据是无序存储的(不支持下标索引)

  • 不允许重复数据存在(去重)

  • 可以修改(增加或删除元素等)

  • 支持for循环,不支持while循环

  • 练习案例:信息去重

"""
集合练习:信息去重
"""
# 有如下列表对象
my_list = ["hi", "hello", "hi", "hi", "python"]
# 定义一个空集合
my_set = set()
# 通过for循环遍历列表
for element in my_list:
    # 在for循环中将列表的元素添加至集合
    my_set.add(element)
# 最终得到元素去重后的集合对象,并打印输出
print(f"列表的内容是:{my_list}")
print(f"去重后的集合对象:{my_set}")

你可能感兴趣的:(《,Python基础,》,python,数学建模,开发语言)