容器类型

Posted Python3技术笔记

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了容器类型相关的知识,希望对你有一定的参考价值。

5. 容器类型 - 2

元组

什么是元组

元组是存储多个数据的一种方式

元组与列表类似,不同之处在于元组的元素不能修改

元组使用小括号(),列表使用方括号[]

>>> aTuple = (\'et\',77,99.9)
>>> aTuple
(\'et\',77,99.9)
元组的使用

访问元组

# 定义一个元组
nums = (100, 200, 300)

# 获取元组中的元素
print(nums[0])

# 遍历
for temp in nums:
    print(temp)

不能修改元组

示例代码:

# 定义一个元组
nums = (100, 200, 300)

nums[0] = 400  # 这里会报错,元组中的数据不能被修改

运行结果:

Traceback (most recent call last):
  File "/Users/poppies/Desktop/元组.py", line 4, in <module>
    nums[0] = 400
TypeError: \'tuple\' object does not support item assignment

不能修改元组中的元素指的是如果当前元组中的元素为不可变对象则不能修改,如果是可变对象在不修改元素类型的情况下可以修改可变对象中的值。

可变对象:listdictset

不可变对象:tuplestringintfloatbool

元组的作用

到现在我们知道元组也是可以存储多个数据的,列表也可以存储多个数据,那为什么有了列表还要有元组呢?而且元组还不能修改

why?

正是因为元组的特点是不能被修改,所以才有了存在它的理由,试想一个程序中有很多场景是有很多数据不能被修改的,这种情况下用列表容易被篡改,反而用元组恰到好处

多提一句,后面学习函数时,一个函数可以通过return返回多个数据,那时就是用的元组。

集合

什么是集合

集合是一种能够存储多个数据的方式

它最大的特点是:数据不能重复

也就是说

  • 列表可以存储多个数据,支持增删改查
  • 元组可以存储多个数据,不能修改
  • 集合依然可以存储多个数据,数据不能重复

可见Python发明的列表、元组、集合各有特点各有千秋,希望大家多练习以便更快掌握它们的精髓

集合的使用

定义

元素1, 元素2, 元素3...

示例

# 定义一个集合
nums = 100, 200, 300

# 测试数据类型真的是集合吗?
print(type(nums))

# 遍历
for temp in nums:
    print(temp)

运行结果:

<class \'set\'>
200
100
300
集合的数据去重
# 定义一个集合
nums = 100, 200, 200, 300, 300, 300

# 测试数据类型真的是集合吗?
print(type(nums))

# 遍历
for temp in nums:
    print(temp)

运行结果:

<class \'set\'>
200
100
300
集合无序

代码示例:

# 定义一个集合
set_data = \'a\', \'b\', \'c\', \'d\', \'e\', \'f\'
print(set_data)

运行结果:

In [1]: set_data = \'a\', \'b\', \'c\', \'d\', \'e\', \'f\'

In [2]: print(set_data)
\'c\', \'d\', \'f\', \'b\', \'a\', \'e\'

注意点

  • 列表、元组在定义时的顺序是怎样的,那么顺序就是怎样的
  • 而集合的实际存储顺序与定义的顺序没有什么关系,而是与一个特殊的算法有关(把数据进行了哈希,这个我们暂不做深入讨论,只需要知道集合的顺序不确定即可)

容器类型的类型互转

引入

所谓互转,就是把一种数据类型在数值不变的情况下 转换为另外一种表示方式

当前容器类型的互转不包含字典!!!

基本使用
nums1 = [11, 22, 33]  # 定义列表
nums2 = (44, 55, 66)  # 定义元组
nums3 = 77, 88, 99  # 定义集合

# 列表转换为元组、集合
print("-----------")
nums1_tuple = tuple(nums1)
print(type(nums1_tuple))
nums1_set = set(nums1)
print(type(nums1_set))

# 元组转换为列表、集合
print("-----------")
nums2_list = list(nums2)
print(type(nums2_list))
nums2_set = set(nums2)
print(type(nums2_set))

# 集合转换为列表、元组
print("-----------")
nums3_list = list(nums3)
print(type(nums3_list))
nums3_tuple = tuple(nums3)
print(type(nums3_tuple))
快速去重

使用set,可以快速的完成对listtuple中的元素去重复的功能

nums1 = [11, 22, 44, 33, 22, 11, 55, 666, 44, 33, 22]
nums2 = (11, 22, 44, 33, 22, 11, 55, 666, 44, 33, 22)

print(set(nums1))  # 将nums1转换为集合的时候,就自动去重了
print(set(nums2))  # 将nums2转换为集合的时候,就自动去重了

运行效果:

33, 11, 44, 22, 55, 666
33, 11, 44, 22, 55, 666
内置方法
方法 描述
add() 为集合添加元素
clear() 移除集合中的所有元素
copy() 拷贝一个集合
difference() 返回多个集合的差集
difference_update() 移除集合中的元素,该元素在指定的集合也存在。
discard() 删除集合中指定的元素
intersection() 返回集合的交集
intersection_update() 返回集合的交集。
isdisjoint() 判断两个集合是否包含相同的元素,如果没有返回 True,否则返回 False。
issubset() 判断指定集合是否为该方法参数集合的子集。
issuperset() 判断该方法的参数集合是否为指定集合的子集
pop() 随机移除元素
remove() 移除指定元素
symmetric_difference() 返回两个集合中不重复的元素集合。
symmetric_difference_update() 移除当前集合中在另外一个指定集合相同的元素,并将另外一个指定集合中不同的元素插入到当前集合中。
union() 返回两个集合的并集
update() 给集合添加元素

以上是关于容器类型的主要内容,如果未能解决你的问题,请参考以下文章

swift 存放多类型的容器

无类型的连续内存容器

容器库概览

Python基础知识—容器类型

C++ 容器与继承

python中的“容器”到底是啥? (以及所有的 python 容器类型是啥?)