最新消息:XAMPP默认安装之后是很不安全的,我们只需要点击左方菜单的 "安全"选项,按照向导操作即可完成安全设置。

史上最全的Python数据类型:元组和集合总结

XAMPP案例 admin 443浏览 0评论

本篇文章给大家带来的是Python的元组和集合。

00Python

元组

如果你接触过比较“资深”的编程语言比如:Java、C++、C# 等,学习上一篇的列表可能会感觉好理解一些。
推荐阅读:Python基础:英雄联盟案例学习List
但是Python元组可是一个新的概念,比较“资深”的编程语言里开始是没有元组的。
而它们的写法和用法又与列表十分相似,有时可能傻傻分不清楚。
下面我们介绍一下元组:
元组也是一个容器类的Python数据类型,里面可以存放多个元素。但是声明的方式跟列表是有区别的。
元组的声明使用的符号是: 小括号,我们对比List列表学习一下
声明方式 声明方式 空元素 数据类型 是否可改(增加、删除、修改) 允许重复元素否 是否支持索引切片
元组 使用小括号() tuple1=() <class ‘tuple’> 不允许 允许 支持
列表 使用方括号[] list1=[ ] <class ‘list’> 允许 允许 支持

所以我们声明一个元组需要按照如下的方式:比如

sports = ()
print(type(sports)) # <class 'tuple'>

当然也可以声明有元素的元组

sports = ('足球','篮球','网球','乒乓球','排球')
print(sports) 
print(type(sports))

查看数组的长度是仍然使用:len()函数

sports = ('足球','篮球','网球','乒乓球','排球')
print(sports) 
print(len(sports))
但是有一点需要特别强调,如果元组中只有一个元素,必须是:sports =(‘足球’,),大家有没有发现里面除了元素足球之外,还多了一个逗号,即声明含有一个元素的元组时,必须要加【逗号】。
当然也可以通过索引和切片获取里面的元素。
sports = ('足球','篮球','网球','乒乓球','排球')
print(sports[1])
print(sports[-1])
print(sports[3])
print(sports[2:])
print(sports[:3])
print(sports[::2])
print(sports[::-1])
print(sports[-2::-1])

结果如下:

篮球

排球

乒乓球

(‘网球’, ‘乒乓球’, ‘排球’)

(‘足球’, ‘篮球’, ‘网球’)

(‘足球’, ‘网球’, ‘排球’)

(‘排球’, ‘乒乓球’, ‘网球’, ‘篮球’, ‘足球’)

(‘乒乓球’, ‘网球’, ‘篮球’, ‘足球’)

支持的运算符:

运算符 含义 表达式 结果
+ 列表合并在一起 (1, 2, 3)+('a', 'b', 'c') (1, 2, 3, 'a', 'b', 'c')
* 列表重复 ('a',) * 3 ('a', 'a', 'a')
in 是否为列表元素 'a' in ('a', 'b', 'c') True

这个跟列表是一样的。

遍历的方式也跟列表的方式是一样的。

sports = ('足球','篮球','网球','乒乓球','排球')
for sport in sports:
    print(sport)
元组的操作只是支持:index和count,不支持增加、删除和修改元素,所以跟索引相关的方法都没有了。
sports = ('足球','篮球','网球','乒乓球','排球','网球')
# 使用index查找元素
print(sports.index('足球'))  # 返回找到元素的下标

# 使用count获取元素的个数
print(sports.count('网球')) # 2 表示个数为2

# 但是如果获取的元素是元组中不存在的元素
print(sports.index('冰球'))   # ----> 此处是报错的:ValueError: tuple.index(x): x not in tuple
说了这么多,主要是存放一些不可变的元素。后面函数、某些方法方法的返回值也是一个元组。
总之,tuple 放弃了对元素的增删(内存结构设计上变的更精简),换取的是性能上的提升:创建 tuple 比 list 要快,存储空间比 list 占用更小。所以就出现了“能用 tuple 的地方就不用 list”的说法。
我的总结是:如果不会涉及到对元素的操作可以使用元组的,这样访问速度会更快。

集合

集合又是何方神圣?集合也是一个容器类的数据类型。但是有了列表和元组怎么又出现了一个集合?
介绍一下集合的特点:
  1. 集合是一个可变容器,就是支持里面元素的变化
  2. 集合内的数据对象都是唯一的(不能重复)
  3. 集合是无序的存储结构,集合内的数据没有先后关系
  4. 集合是可迭代对象
  5. 集合的底层是字典结构

集合到底长成啥样子呢?定义方式:

空集合:set1 = set()

有元素的集合:set1 ={‘足球’,’篮球’,’网球’,’乒乓球’,’排球’ }

可以发现符号发生了变化,再次与列表和元组一起对比学习下:

名称 符号 空元素 数据类型 是否可改(增加、删除、修改) 是否允许重复 是否支持索引 符号支持
列表 [ ]方括号 list1=[] <class ‘list’> 可以 允许 支持 + * in
元组 ()小括号 tuple1=() <class ‘tuple’> 不可以 允许 支持 + * in
集合 {}大括号 set1=set() <class ‘set’> 可以 不允许 不支持 &|-^in
sports ={'足球','篮球','网球','乒乓球','排球','篮球','网球' }
print(type(sports))
print(len(sports))  #同样适用len()获取长度
print(sports) # 注意里面只有一个篮球和网球,即不允许重复元素
集合操作
注意:因为不支持索引,所以索引相关的操作是不存在的。但是集合可以求交集、并集、差集、交叉补集
添加元素: set.add()
add():向集合内增加元素,如果添加的元素已经存在的话,则不执行任何操作
sports ={'足球','篮球','网球','乒乓球','排球','篮球','网球' }
sports.add('冰球')
print(sports)

sports.add('篮球')
print(sports)
删除集合元素:set.pop() 与 set.remove()
pop(): pop会从集合中随机删除一个数
remove(): 删除指定元素,如果是不存在的元素会报错。
discard(): 与remove()类似,如果是不存在的元素不会报错。
sports ={'足球','篮球','网球','乒乓球','排球','篮球','网球' }
sports.pop()  # pop会从集合中随机删除一个数
print(sports)

sports.remove('篮球')
print(sports)

sports.remove('冰球')
print(sports)
集合的运算操作
交集: 交集可以使用符号:【&】完成。跟数学中的交集是一样的,就是求两个集合中共同都有的元素
sports1 ={'足球','篮球','网球','乒乓球'}
sports2= {'乒乓球','排球','篮球','网球','冰球'}
print(sports1&sports2)

结果:

{‘篮球’, ‘乒乓球’, ‘网球’}

并集:并集可以使用符号:【|】完成,就是将两个集合并在一起。

sports1 ={'足球','篮球','网球','乒乓球'}
sports2= {'乒乓球','排球','篮球','网球','冰球'}
print(sports1|sports2)

结果:

{‘冰球’, ‘篮球’, ‘网球’, ‘足球’, ‘排球’, ‘乒乓球’}

差集:差集使用符号:【-】完成,就是求当前与另一个集合不同的。

sports1 ={'足球','篮球','网球','乒乓球'}
sports2= {'乒乓球','排球','篮球','网球','冰球'}
print(sports1-sports2)  # 就是求sports1与sports2不同的是

结果:

{‘足球’}

交叉补集:
理解下交叉补集:集合A 是{1、2、3 },集合B 是 {2、3、4 } . 交叉补集就只保留 1 和 4 。因为 1 是 A 独有的, 4 是B 独有的。交叉补集会去掉共有的部分,只保留双方独有的部分。
现在我们求sports1和sports2的交叉补集,使用符号是:【^】完成。
sports1 ={'足球','篮球','网球','乒乓球'}
sports2= {'乒乓球','排球','篮球','网球','冰球'}
print(sports1^sports2)  

结果:

{‘冰球’, ‘足球’, ‘排球’}

当然每个符号也有对应的集合函数。

符号 函数
& set1.intersection(set2)求set1和set2的交集
| set1.union(set2) 求set1和set2的并集
set1.difference(set2) 求set1和set2的差集
^ set1.symmetric_difference(set2) 求set1和set2的交叉补集
好了!本篇文章就给大家介绍到这里,篇幅有限大家可以多多沟通交流哦!多提宝贵意见!感谢!

转载请注明:XAMPP中文组官网 » 史上最全的Python数据类型:元组和集合总结

您必须 登录 才能发表评论!