Python数据容器之set(集合)

234 阅读2分钟
数据容器——set(集合)

通过已经接触过的列表、元组、字符串特性分析:

  • 列表可修改、支持重复元素且有序
  • 元组、字符串不可修改、支持重复元素且有序
  • 集合:不支持元素的重复(自带去重功能)、且内容无序

简单总结数据容器的定义:

  • 列表:[]
  • 元组:()
  • 字符串:""
  • 集合:{}
# 定义集合字面量
{元素1, 元素2, 元素3, ...}
​
# 定义集合变量
变量名称 = {元素1, 元素2, 元素3, ...}
​
# 定义空集合
变量名称 = set()
​
# 定义集合
my_set = {"python", "java", "c++", "rube", "js", "python", "c++"}
print(my_set) # {'python', 'java', 'js', 'rube', 'c++'} # 去重 无序
print(type(my_set)) # <class 'set'>
​
your_set = set()
print(type(your_set)) # <class 'set'># 添加新元素
my_set.add("PHP")
my_set.add("python")
print(my_set) # {'rube', 'python', 'js', 'java', 'PHP', 'c++'}# 移除元素
my_set.remove("rube")
print(my_set) # {'js', 'PHP', 'python', 'c++', 'java'}# 随机取出一个元素 # 由于集合是无序的,pop方法无参数,取出的元素是随机的
element = my_set.pop()
print(element) # js
print(my_set) # {'PHP', 'c++', 'java', 'python'}# 清空集合
my_set.clear()
print(my_set) # set()
print(type(my_set)) # <class 'set'># 延申
my_a = ()
print(f"{my_a}  {type(my_a)}") # ()  <class 'tuple'>
my_b = []
print(f"{my_b}  {type(my_b)}") # []  <class 'list'>
my_c = {}
print(f"{my_c}  {type(my_c)}") # {}  <class 'dict'>
my_d = ""
print(f"{my_d}  {type(my_d)}") #   <class 'str'># 取两个集合的差集
# 语法:集合1.difference(集合2) 功能:取出集合1和集合2的差集(集合1有而集合2没有的)
# 结果:得到一个新的集合,集合1和集合2不变
set_1 = {1, 2, 3, 4}
set_2 = {3, 4, 5, 6}
set_3 = set_1.difference(set_2)
print(set_1) # {1, 2, 3, 4}
print(set_2) # {3, 4, 5, 6}
print(set_3) # {1, 2}# 消除两个集合的差集
# 语法:集合1.difference_update(集合2)
# 功能:对比集合1和集合2,在集合1内,删除和集合2相同的元素
# 结果:集合1被修改,集合2不变
set_1.difference_update(set_2)
print(set_1) # {1, 2}
print(set_2) # {3, 4, 5, 6}# 两个集合合并
# 语法:集合1.union(集合2)
# 功能:将集合1和集合2组合成新集合
# 结果:得到新集合,集合1和集合2不变
set_1 = {1, 2, 3, 4}
set_2 = {3, 4, 5, 6}
set_4 = set_1.union(set_2)
print(set_1) # {1, 2, 3, 4}
print(set_2) # {3, 4, 5, 6}
print(set_4) # {1, 2, 3, 4, 5, 6}# 统计集合元素数量
set_5 = {1, 2, 3, 3, 2 ,4 ,5, 6}
print(len(set_5)) # 6# 集合的遍历
# 集合不支持下标索引,因此不可以用while循环遍历
# 可以用for循环遍历
for ele in set_5:
    print(ele)
​

集合的特点:

  • 可以容纳多个数据
  • 可以容纳不同类型的数据(混装)
  • 数据是无序存储的(不支持下标索引)
  • 不允许重复数据存在
  • 可以修改(增加或删除元素等)
  • 支持for循环遍历
my_list = ["python", "java", "c++", "python", "python", "java"]
​
my_set = set(my_list)
print(my_list) # ['python', 'java', 'c++', 'python', 'python', 'java']
print(my_set) # {'python', 'java', 'c++'}
​
my_set_2 = set()
for ele in my_list:
    my_set_2.add(ele)
print(my_set_2) # {'java', 'c++', 'python'}