Python数据容器(集合)


思考?
我们目前接触到了列表、元组、字符串三个数据容器了。基本满足大多数的使用场景。为何要学新的集合类型呢?
通过特性分析

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

存在局限性

  • 它们都支持重复元素

如果场景需要对内容做去重处理,列表、元素、字符出就不方便。而集合,最主要的特点就是:不支持元素的重复(自带去重)、并且内容无序

1.集合的定义

1.基本语法

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

示例

names = {'python','itheima','程序员','python'}
print(names)
##输出 {'itcast', '程序员', 'python', 'itheima'}

结果中可见去重且无序

2.集合中常用操作

集合是无序的,所以集合不支持下标索引

  • 添加新元素
    • 语法:集合.add(元素),将指定元素添加道集合中去
    • 结果:集合本身被修改,添加了新元素
my_set = {'Hello','World'}
my_set.add('itheima')
print(my_set) # 结果 {'World', 'Hello', 'itheima'}
  • 移除元素
    • 语法:集合.remove(元素),将指定元素,从集合内移除
    • 结果:集合本身被修改,移除了元素
my_set = {'World', 'Hello', 'itheima'}
my_set.remove('itheima')
print(my_set) # 结果 {'World', 'Hello'}
  • 从集合中随机取出元素
    • 语法:集合.pop(),从集合中随机取出一个元素
    • 结果:会得到一个元素的结果。同时集合本身会被修改,元素被移除
my_set = {'World', 'Hello', 'itheima'}
element = my_set.pop()
print(my_set)  # 结果 {'Hello', 'World'}
print(element) # 结果 itheima
  • 清空集合
    • 语法:集合.clear()
    • 功能:清空集合
    • 结果:集合本身被掏空
my_set = {'World', 'Hello', 'itheima'}
my_set.clear()
print(my_set)  # 结果 set()
  • 取出2个集合的差集
    • 语法:集合1.difference(集合2)
    • 功能:取出集合1和集合2的差集(集合1有而集合2没有的)
    • 结果:得到一个新集合,集合1和集合2不变
set1 = {1,2,3}
set2 = {1,5,6}
set3 = set1.difference(set2)
print(set3)  # 结果: {2,3} 得到新的集合
print(set2)  # 结果:{1,5,6} 不变
print(set1)  # 结果:{1,2,3} 不变
  • 消除两个集合的差集
    • 语法:集合1.difference_update(集合2)
    • 功能:对比集合1和集合2,在集合1内,删除集合2相同的元素
set1 = {1,2,3}
set2 = {1,5,6}
set1.difference_update(set2)
print(set1)  # 结果:{2,3} 
print(set2)  # 结果:{1,5,6} 不变
  • 2个集合合并
    • 语法:集合1.union(集合2)
    • 功能:将集合1和集合2组成新的集合
    • 结果:得到新集合,集合1和集合2保持不变
set1 = {1,2,3}
set2 = {1,5,6}
set3 = set1.union(set2)
print(set3)  # 结果:{1,2,3,5,6} 新集合
print(set1)  # 结果:{1,2,3} 不变
print(set2)  # 结果:{1,5,6} 不变
  • 查看集合的元素数量
    • 语法:len(集合)
    • 功能:统计集合内又多少元素
    • 结果:得到一个整数结果
set = {1,2,3}
print(len(set)) # 结果 3

3.集合的遍历
注意:集合不支持下标索引,所以也就不支持使用while循环

  • 支持for循环
set = {1,2,3}
for i in set:
    print(i) # 结果 1 2 3

4.常用功能总结

编号操作说明
1集合.add(元素)集合内添加一个元素
2集合.remove(元素)集合内删除指定的元素
3集合.pop()从集合中随机取出一个元素
4集合.clear()将集合清空
5集合1.difference(集合2)得到一个新集合,内含2个集合的差集,原有的2个集合内容不变
6集合1.difference_update(集合2)在集合1中,删除集合2中存在的元素,集合1被修改,集合2不变
7集合1.union(集合2)得到1个新集合,内含2个集合的全部元素,原有的2个集合内容不变
8len(集合)得到一个整数,记录了集合的元素数量

5.集合的特点

  • 可以容纳多个数据
  • 可以容纳不同类型的数据(混装)
  • 数据是无序存储的(不支持下标索引)
  • 不允许重复数据存在
  • 可以修改(增加或删除元素)
  • 支持for循环

6.练习

在这里插入图片描述

my_list = ['黑马程序员', '传智播客', '黑马程序员', '传智播客', 'itheima', 'itcast', 'itheima', 'itcast', 'best']
# 定义一个空集合
my_set = set()
# 通过for循环遍历列表
# 在for循环中将列表的元素添加至集合
for i in my_list:
    my_set.add(i)
# 最终得到元素去重后的集合对象,并打印输出
print(f"有列表{my_list}")
print(f"存入集合结果:{my_set}")
### 输出
有列表['黑马程序员', '传智播客', '黑马程序员', '传智播客', 'itheima', 'itcast', 'itheima', 'itcast', 'best']
存入集合结果:{'黑马程序员', 'best', '传智播客', 'itcast', 'itheima'}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值