当前位置:
首页 > Python基础教程 >
-
python基础教程之基本数据类型(二)(2)
'3', '1', '2'}
for i in s:
print(i)
...
3
1
2
'3' in s
True
s = {3. 转换类型
不能将数字和字典转换为集合。
>>> set([1,2,3])
{1, 2, 3}
>>> set('123')
{'3', '1', '2'}
4.2 内置方法
# add(*args, **kwargs):添加一个元素
>>> s = {1, 2, 3}
>>> s.add(4)
>>> s
{1, 2, 3, 4}
# clear():清空集合
>>> s = {1, 2, 3}
>>> s.clear()
>>> s
set()
# copy():浅拷贝
>>> s = {1, 2, 3}
>>> s1 = s.copy()
>>> s1
{1, 2, 3, 4}
# pop():随机移除一个元素
>>> s1 = {1, 2, 3}
>>> s1.pop()
1
>>> s1
{2, 3}
# remove(value):删除某个指定元素,若元素不存在抛出 KeyError
>>> s1 = {1, 2, 3}
>>> s1.remove(2)
>>> s1
{1, 3}
# discard(value):与 remove()一样都是删除某个元素,但是元素不存在不会报错
>>> s1 = {1, 2, 3}
>>> s1.discard(4)
# difference_update(set2):更新集合,相当于 s1 = s1 - s2
>>> s1 = {1, 2, 3}
>>> s2 = {2, 3, 4}
>>> s1.difference_update(s2)
>>> s1
{1}
# intersection_update(set2):求交集,与 intersection()不同的是它不会改变原集合,而 intersection()返回新的集合
>>> s1 = {1, 2, 3}
>>> s2 = {2, 3, 4}
>>> s1.intersection(s2)
{2, 3}
>>> s1
{1, 2, 3}
# set1.isdisjoint(set2):判断两个集合有无交集,有交集返回 False
>>> s1 = {1, 2, 3}
>>> s2 = {2, 3, 4}
>>> s1.isdisjoint(s2)
False
# s1.issubset(set2):判断 set1 是否是 set2 的子集(即 set1 <= set2)
# set1.issuperset(set2):判断 set1 是否是 set2 的父集
>>> s1 = {1, 2, 3}
>>> s2 = {2, 3, 4}
>>> s1.issubset(s2)
False
>>> s1.issuperset(s2)
False
# set.update(set2):给集合添加元素,参数可以是集合、字符串、列表、元组、字典等
>>> s1 = {1, 2, 3}
>>> s1.update({'a':'b'}) # 字典
>>> s1
{1, 2, 3, 'a'}
>>> s1.update([4, 5]) # 列表
>>> s1.update({6, 7}) # 集合
>>> s1
{1, 2, 3, 4, 5, 6, 7, 'a'}
# set1.symmetric_difference_update(set2):求交叉补集,在原集合上更新,将不重复的元素添加到原集合中
>>> s1 = {1, 2, 3}
>>> s2 = {2, 3, 4}
>>> s1.symmetric_difference_update(s2)
>>> s1
{1, 4}
不可变集合
有时想要像元组一样不能随意添加、删除集合元素,可以使用 frozenset()函数定义一个不可变集合。
>>> s1 = frozenset({1, 2, 3})
>>> s1.add(4)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'frozenset' object has no attribute 'add'
4.3 集合关系运算
1. 交集(&)
交集即两个集合重复的部分,intersection()方法可以用来求两个集合的交集,并返回交集,不改变原集合。
set1.intersection(set2)
set1 & set2
>>> s1 = {1, 2, 3}
>>> s2 = {2, 3, 4}
>>> s1.intersection(s2)
{2, 3}
>>> s1
{1, 2, 3}
>>> s1 & s2
{2, 3}
2. 并集(|)
并集即将两个集合的所有元素并在一起,重复的只出现一次,可以用作简单去重。
set1.union(set2)
set1 | set2
>>> s1 = {1, 2, 3}
>>> s2 = {2, 3, 4}
>>> s1.union(s2)
{1, 2, 3, 4}
>>> s1 | s2
{1, 2, 3, 4}
3. 差集(-)
差集即 set1 - set2
,两个集合中重复的元素去掉,仅包含第一个集合中剩余的元素,不包含第二个集合剩余的元素,不改变原集合。
set1.difference(set2)
set1 - set2
>>> s1 = {1, 2, 3}
>>> s2 = {2, 3, 4}
>>> s1.difference(s2)
{1}
>>> s1 - s2
{1}
>>> s1
{1, 2, 3}
4. 交叉补集(^)
交叉补集即两个集合不重复的元素,不改变原集合。
set1.symmetric_difference(set2)
set1 ^ set2
>>> s1 = {1, 2, 3}
>>> s2 = {2, 3, 4}
>>> s1.symmetric_difference(s2)
{1, 4}
>>> s1
{1, 2, 3}
>>> s1 ^ s2
{1, 4}
5. 去重
可以利用集合对列表进行简单去重,先将其转换为集合,再转换为列表,需要注意的是,元素顺序将会改变。
>>> names = ['rose', 'lila', 'tom', 'rose']
>>> names = list(set(names))
>>> names
['lila', 'tom', 'rose']
5. 序列
序列即有序元素集合,是可迭代对象,包括字符串、列表、元组,它们之间用很多共同点:
- 都可以通过索引获取值,即是有序(索引从 0 开始)
- 可以切片
- 有共同的操作符(重复、拼接、成员关系操作符等)
enumerate()方法
enumerate(iterable)方法用于生成一个二元组(二元组即元素数量为二的元组)构成的一个可迭代对象,每个二元组由可迭代索引与对应元素组成。
>>> s = 'abc'
>>> for i in enumerate(s):
... print(i)
...
(0, 'a')
(1, 'b')
(2, 'c')
6. 练习
字典无限嵌套
cities={
'北京':{
'朝阳':['国贸','CBD','天阶','我爱我家','链接地产'],
'海淀':['圆明园','苏州街','中关村','北京大学'],
'昌平':['沙河','南口','小汤山',],
'怀柔':['桃花','梅花','大山'],
'密云':['密云A','密云B','密云C']
},
'河北':{
'石家庄':['石家庄A','石家庄B','石家庄C','石家庄D','石家庄E'],
'张家口':['张家口A','张家口B','张家口C'],
'承德':['承德A','承德B','承德C','承德D']
}
}
for i in cities['北京']:
print(i)
朝阳
海淀
昌平
怀柔
密云
for i in cities['北京']['海淀']:
print(i)
圆明园
苏州街
中关村
北京大学
栏目列表
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比
一款纯 JS 实现的轻量化图片编辑器
关于开发 VS Code 插件遇到的 workbench.scm.
前端设计模式——观察者模式
前端设计模式——中介者模式
创建型-原型模式