首页 > 其他分享 >容器类型 - 2

容器类型 - 2

时间:2023-03-30 21:02:30浏览次数:32  
标签:容器 set nums 元素 元组 print 类型 集合

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() 给集合添加元素

标签:容器,set,nums,元素,元组,print,类型,集合
From: https://www.cnblogs.com/wt-poppies/p/17274271.html

相关文章

  • 容器类型 - 1
    4.容器类型-1字符串介绍定义如下定义的变量a,存储的是数字类型的值a=100如下定义的变量b,存储的是字符串类型的值b="www.tulingxueyuan.com"#或者b='www.tulingxueyuan.com'小总结:双引号或者单引号中的数据,就是字符串下标下标:就是标记空间的一个数字有些......
  • 结构体里面定义一个该结构体类型变量为什么必须用指针
    一.错误:structTreeNode{intval;TreeNodeleft;TreeNoderight;};二.分析原因:如果在定义classA时,A域的类型是未定义的classA而不是指向classA对象的指针类型,编译器会尝试在编译时分配一块内存给A域,但由于classA的定义还没有出现,因此无法确定A域需要多......
  • C#变量类型有哪些,有什么区别
    C#变量类型分为 值类型、引用类型区别:值类型变量可以直接包含值数据直接储存在栈中引用类型包含变量的引用,通过引用找到值值类型包括:整型,浮点型,字符型(char),布尔型(bool),枚举型(enum),结构型(struct)。整型包含:byte,sbyte,short,ushort,int,uint,long,ulong;浮点型包括:floa......
  • Linux系统把时间类型值转换为数值型的方法是什么?
    在实际工作中,我们往往会遇到各式各样的需求,今天老男孩教育小编给大家介绍一下,如何把时间类型值转换为数值类型,以下是详细的内容:1.取子串函数格式:substr(c,n1.n2)功能:取字符串C第n1个字符起的n2个字符.返回值类型是字符型.例:取姓名字符串中的姓.store"......
  • SpringBoot中如何动态加载类到容器
    任何业务脱离场景无任何实际意义。场景:1,实现了多种存储方式,redis和本地内存或者其它,但是你希望根据注解配置只加载一种类到容器。2,经典场景:mybatis将接口的代理类动态加载到容器。分类:静态加载:1,springboot中会扫描同包路径下的(@configuration@Service@Component)标记了上述......
  • chatgpt: 在ts中如何声明一个全局类型
    在TypeScript中声明全局类型可以使用declareglobal关键字,使得在应用的任何地方都能够使用该类型。例如,如果需要在TypeScript中声明一个全局的foo变量,可以使用以下代码:declareglobal{varfoo:string;}上述代码中的declareglobal关键字表示声明一个全局类型,......
  • EasyCVR视频融合平台国标GB28181协议设备接入时,可支持过滤通道类型
    EasyCVR基于云边端智能协同架构,能支持海量视频的轻量化接入与集中汇聚管理,平台可支持多协议接入,包括市场主流标准协议与厂家私有协议及SDK,如:国标GB28181、RTMP、RTSP/Onvif、海康Ehome、海康SDK、宇视SDK等(具体见下图),可分发多格式的视频流,包括:RTSP、RTMP、HTTP-FLV、WS-FLV、HLS、......
  • 云原生容器高可用运维能力应用
    摘要:华为云容器SRE在海量集群和容器运维实践中,从智能运维能力、确定性场景恢复等多方面总结出一套确定性运维实践,以应对云原生业务快速增长。本文分享自华为云社区《云原......
  • 应用上容器云的准入条件和最佳实践
    随着Kubernetes的发展,现在有一个新的技术趋势:在容器云中以Pod的方式运行虚拟机,这样容器云平台就能够提供普通容器无法实现的功能。相信通过类似的技术,越来越多的应用会向容......
  • OS:资源类型 & 锁
    1、资源类型分类标准:可重用、可抢占。1.1、重用性可重用资源(永久)可被多个进程重复使用。一次只能分配给一个进程使用,其它线程必须等待资源释放。数目:固定,进程无法......