Python数据容器:set(集合)

my_list=['黑马程序员', '传智播客', "黑马程序员", '传智播客', 'itheima', 'itcast',
'itheima', 'itcas', 'best']
New_set = set()
for element in my_list:
    New_set.add(element)
print(f"最终得到的集合为:{New_set}")
# 输出结果:最终得到的集合为:{'itcas', 'best', 'itheima', 'itcast', '黑马程序员', '传智播客'}

1、集合(set)存在的意义(为什么要有集合?)

通过特性来分析:
列表可修改、支持重复元素且有序;元组、字符串不可修改、支持重复元素且有序。

以上的数据容器都支持重复元素,但是如果场景需要对内容做去重处理,列表、元组、字符串就不方便了。

集合,最主要的特点是:不支持元素的重复(即使输入的元素重复,也会自带去重功能)并且内容无序。如果定义了一个内部元素有重复的集合,输出它,会发现它已经自动去重了。

2、集合的定义

定义集合变量 变量名称 = {元素1,元素2,元素3……}

定义空集合  变量名称 = set(())

列表:[]
元组:()
字符串:""
集合:{}

 3、集合不是序列

当说到集合不是序列时,意味着集合与序列具有不同的特性和行为。序列是指包含有序元素的数据结构,例如列表、元组和字符串。序列具有以下特性:

        1. 有序性:序列中的元素按一定顺序排列,并且可以通过索引访问元素。
        2. 可索引性:可以使用索引来访问指定位置的元素。
        3. 可切片性:可以通过切片操作获取序列的子序列。
        4. 可迭代性:可以使用迭代器逐个访问序列中的元素。
        5. 元素重复性:序列允许包含重复的元素。

相比之下,集合是无序的,不包含重复元素的数据结构。集合具有以下特性:

        1. 无序性:集合中的元素没有固定的顺序,无法通过索引访问元素。
        2. 不可索引性:集合中的元素无法通过索引来访问,因为集合没有定义元素的顺序。
        3. 不可切片性:集合不支持切片操作,因为无序性导致无法定义子集合的范围。
        4. 不可迭代性:集合不是可迭代对象,无法使用迭代器逐个访问元素。
        5. 唯一性:集合中的元素是唯一的,不允许包含重复元素。

总之,虽然集合在某些方面与序列有相似之处,但它们在行为和特性上存在明显的差异。

 4、集合常用操作

操作语法结果
下标索引访问集合不支持该操作集合不支持该操作(因为集合是乱序的,且集合不是序列)
遍历集合不支持while循环,但是支持for循环得到集合中的元素
添加新元素集合.add()集合本身被修改,添加了新元素
移除元素
(将指定元素,从集合内移除)
集合.remove(元素)集合本身被修改,移除了元素
从集合中随机取出一个元素集合.pop()

会得到一个元素的结果

同时集合本身被修改,元素被移除

清空集合集合.clear()集合被清空
取出2个集合的差集
(只有集合有该操作)
集合3 = 集合1.difference(集合2)

取出集合1和集合2的差集(集合1有,而集合2没有的)

得到一个新的集合,集合1和集合2不变

消除2个集合的差集集合3 = 集合1.difference _update(集合2)

集合1被修改,集合2不变
集合1内与集合2相同的元素被删除

集合3就是集合1

2个集合合并

将集合1和集合2组合成新集合

集合3 = 集合1.unior(集合2)得到新集合, 集合1和集合2不变
求集合的长度len(集合)得到集合的长度

示例代码:
 

my_set = {"1", "2", "3", "4", "5", "1", "2", "3", "4"}
my_set_empty = set()

print(my_set)
print(my_set_empty)

"""
    输出结果:
    {'4', '2', '1', '3', '5'} 
    set()
"""

# 集合添加元素 add()
my_set = {"1", "2", "3", "4", "5", "1", "2", "3", "4"}
my_set.add("Python")
print(f"增加元素后的集合为{my_set}")
# python 的位置是不固定的。
# 输出:增加元素后的集合为{'4', '5', '1', 'Python', '2', '3'}

# 集合移除元素 remove()
my_set.remove("1")
print(f"移除元素后的集合为{my_set}")
# 输出:移除元素后的集合为{'4', '5', 'Python', '2', '3'}

# 集合随机移除一个元素
element = my_set.pop() #element是被移除的元素
print(f"随机移除一个元素后,集合为{my_set}")
print(f"被随机移除的元素是:{element}")
"""
    输出结果:
    随机移除一个元素后,集合为{'Python', '5', '4', '2'}
    被随机移除的元素是:3 
"""

# 集合的差集
set1 = {"1", "2", "3", "4", "5", "Hello", "World"}
set2 = {"1", "2", "3", "4", "5"}
set3 = set1.difference(set2)
print(f"集合1与集合2的差集为{set3}")
# 输出:集合1与集合2的差集为{'World', 'Hello'}

set4 = {"1", "2", "3", "4", "5"}
set5 = {"1", "2", "3", "4", "5", "Hello", "World"}
set6 = set4.difference(set5)
print(f"集合5与集合6的差集为{set6}")
# 输出:集合5与集合6的差集为set() (表明差集是空集)

# 消除2个集合的差集
set1.difference_update(set2)
print(f"消除2个集合的差集后的集合1为:{set1}")
# 输出:消除2个集合的差集后的集合1为:{'World', 'Hello'}

# 集合合并
print(f"合并前的set1为{set1},合并前的my_set为{my_set}")
set7 = set1.union(my_set)
print(f"合并后的集合为{set7}")
'''
    输出:
    合并前的set1为{'World', 'Hello'},合并前的my_set为{'2', 'Python', '4', '5'}
    合并后的集合为{'Python', 'World', 'Hello', '2', '4', '5'}
'''

# 遍历集合
print(f"my_set中的元素分别为", end=":  ")
for element in my_set:
    print(element,end="  ")
# 输出:my_set中的元素分别为:  Python  3  4  5

5、代码练习——信息去重

有如下列表对象:
my_list=['黑马程序员', '传智播客', "黑马程序员", '传智播客', 'itheima', 'itcast', 'itheima', 'itcas',  'best']
请:
1、定义一个空集合
2、通过for循环追历列表
3、在for循环中将列表的元素添加至集合
4、最终得到元素去重后的集合对象,并打印输出

my_list=['黑马程序员', '传智播客', "黑马程序员", '传智播客',    'itheima',
  'itcast','itheima', 'itcas', 'best']
New_set = set()

# 其实这一步不用for循环,直接转换就可以实现
for element in my_list:
    New_set.add(element)
print(f"最终得到的集合为:{New_set}")
"""
输出结果:最终得到的集合为:{'itcas', 'best', 'itheima', 'itcast', 
'黑马程序员', '传智播客'}
""" 
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wmpreturn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值