Python语言中的数据类型-序列
作者:酷尔。 发布时间:2023-08-31 14:36:24
前言:
前面我们提到了Python
数据类型中的内置数值类型与字符串类型。今天学习一下Python的序列数据类型,要知道的是在Python中没有数组这一数据结构,也没有提供直接创建数组的功能,但是可以使用内置的序列数据类型实现数组的某些功能。
一、什么是序列数据类型?
序列数据类型是Python
中的一种基础的数据结构,是一组有顺序的元素的集合。
这个集合内可以有多个元素也可以不包含元素。
总的来说包含元组(tuple
)、列表(list
)、字符串(str
)、字节数据(bytes
与bytearray
)
如果根据对象可变不可变进行划分的话
可变序列为:列表、字节数组
不可变序列为:字符串、元组、字节序列
二、序列数据类型的基本操作
1.序列的通用方法
支持序列类型的内置函数:len()
、max()
、min()
、sum()
。其中使用sum()函数的时候
必须是数值型序列,如果有非数值型的序列则将抛出TypeError,对于字符串、字节数
据也会导致该结果。其余函数在使用的时候对字符按照字典序进行挑选。
2.通过索引访问数据
序列中的各个类型均是可以迭代的对象,可以直接使用for 循环进行迭代获取每一个数据。也可以通过下标索引进行指定位置上的数据获取。序列的第一个元素是X[0],序列的最后一个元素是X[len(X)-1]
。序列的下标越界或者不是整数均会导致异常。
序列还支持切片操作,如下:
st="asfdcac"
#打印所有的数据
print(st[::])
#逆序打印字符串
print(st[-1::-1])
3.同类型的序列进行拼接
序列可以使用操作符+连接两个序列,形成一个新的序列对象。也可以通过*进行序列的重复。
4.判断序列成员
在本文中前面提到了可以使用循环对序列进行迭代,找出每一个元素除了这一功能,Python中还有直接判断序列中是否包含某成员
语法规则如下:
x in s【如果x在序列s中则为True】
x not in s【如果x不在序列s中为True】
s.count(x)【统计X在序列s中出现的次数】
s.index(X)【找到X在s中第一次出现的坐标,找不到就报错】
5.序列的排序操作
通过内置函数sorted()
可以对序列进行排序,并将排序后的结果进行返回。
def sorted(*args, **kwargs):
这里可以传参一个可迭代的序列,reverse
可以指定升序还是降序当reverse
为True时排序结果为降序。key参数是用于计算比较键值的函数
6.内置函数all()与any()
这两个函数的作用就是判断所有的数据是否全为True
对于all()而言所有的成员均为True时结果才为True
对于any()而言只要有成员为True时结果就为True
7.序列的拆分
①有限个数变量进行序列的拆分
在本方法下要确定序列的成员个数与接受变量个数保持一致。
变量1,变量2,变量3=序列
②不确定个数成员变量进行拆分
本方法使用与接受序列 * 定位置的成员,使用*进行不确定个数成员变量的接受。
每次拆分*控制的变量只允许出现一次。
例如:
mystr="nfklsdnfj0sd.....asdfl"
s1,*args,s2=mystr
此时s1,s2会分别接收n与l其余的将会让args进行接受。
三、列表
列表的介绍:
前面提到了列表是一个可变的序列,意思就是可以直接对列表对象本身进行修改删除等操作
列表还是Python中一组有序的数据结构,在Python中没有数组,可以使用列表起数组的作用(✪ω✪)
1.创建列表
有三种方法:
1.字面量直接创建
2.使用list()与可迭代对象创建
3.列表解析表达式
代码如下:
# 直接声明
lis0=list(i for i in range(0,101,10))
print(lis0)
lis1=[1,2,3,4]
# 迭代器进行声明
lis2=[ i for i in range(0,101,10)]
print(lis1,lis2)
#字面量
lis3=['Hello',123,'print',bool]
print(lis3)
'''
2.向列表内添加数据
代码如下:
# 直接在列表末尾添加
lis1.append(2)
print(lis1)
# 切片法添加元素(直接追加另外一个列表的一部分元素)内存地址不变
print(id(lis1))
lis1.extend(lis2)
lis1.extend(lis2[1:5])
print(lis1,id(lis1))
# 在指定的位置插入指定的元素999
lis1.insert(1,999)
print('11111111111',lis1)
3.删除列表内的数据
代码如下:
# 什么也不填,默认删除的是列表的最后一个元素
lis1.pop()
print(lis1)
# 将列表内的指定下标元素进行删除
lis1.pop(1)
print(lis1)
# 删除指定的元素
lis1.remove(80)
print(lis1)
# 切片法删除元素
# 切片法删除元素后,列表的地址会发生改变*****
print(id(lis1),id(lis1[1:4]),lis1[1:4])
lis1[1:4]
# 清空列表
lis1.clear()
print(lis1)
# 删除列表(再使用该列表的时候会报错)
del lis1
# print(lis1)
'''列表内元素的修改'''
print(lis2)
# 对指定索引的元素进行修改
lis2[0]=100
print(lis2)
# 切片法修改一段列表
# 会将新指定的列表,替换掉指定索引区间的元素,区间超出的话,会直接在末尾添加
# 切片内的元素个数,与所要改成的切片元素个数,不一致没关系直接进行替换
lis2[10:]=[1,2,3]
print(lis2)
# del也可以对指定位置元素进行删除
del lis[1]
del lis[2:4]
# 也可以直接对列表的某段进行赋空[]达到删除的效果
lis2[2:4]=[]
三、元组
元组是不可变序列,所以不支持增删,这里仅仅对他的特性以及注意点进行介绍。
元组也是一组有序序列,包含零个或多个对象的引用,与列表十分相似但又有许多不同.
具体来说有以下特点:
元组是不可变序列仅支持读取
1、不支持添加元素【增】
2、不支持删除元素【删】
3、不支持修改元素(修改操作的步骤是:先删除、再添加)【改】
4、支持2种查找元素【查】
a、根据下标查找元素,常称为【访问】元素,时间复杂度为O(1)
b、根据元素获取下标,常称为【查找】元素,时间复杂度为O(n)
如果元组中只有一个数据,那么数据后的逗号不可省略元组的括号可以省略。
元祖的声明与遍历如下:
# 元组的声明一
s=('Tom',666,'嗨')
print(s,type(s))
# 元组的声明二
p=tuple(('Tom',666,'嗨'))
print(p)
# 空元组
ss=()
print(ss,type(ss))
# 单元素元组--要加,否则会会直接转换成字符串类型
sss=('fuck')
print(sss,type(sss))
# 元组的括号可以省略
sss='fuck',
print(sss,type(sss))
tp=('nabd',['123',123],'李四')
print(tp)
# 元组对应位置的元素不会变,但元组对应位置元素里面的内容可以改变
tp[1].insert(1,666)
print(tp)
# 元组的遍历
for temp in s:
print(temp)
四、字符串
在前面一篇博客已经提到过字符串了,这里就不再啰嗦一遍了。
五、字节序列
字节序列可以分为可变字节序列(bytearray)与不可变字节序列(bytes)。
使用字面量生成字节数列只需要在字符串前加上b即可。
eg:str1=b"Hello world"
也可以使用bytes()
或者bytearray()
进行字节序列的声明
其中参数可以传递可迭代对象,只不过可迭代对象的成员要是在0-255的整数。bytes
或者bytearray
的方法不接受字符串参数,只接受对应类型的参数。否则报错
字节序列支持序列的基本操作。
可以通过字符串编码得到字节序列,也可以通过解码字符序列得到字符串
使用的函数是decode()
与encode()
。使用过程要注意编码、解码规则。
总结:
本篇博客针对Python序列进行了讲解。序列在学习使用Python中还是经常使用的,希望大家好好掌握,
来源:https://blog.csdn.net/apple_51931783/article/details/123066971
猜你喜欢
- canny边缘检测原理canny边缘检测共有5部分组成,下边我会分别来介绍。1 高斯模糊(略)2 计算梯度幅值和方向。可选用的模板:sobl
- 多线程编程当中, 线程的存在形态比较抽象. 通过前台线程\后台线程, 可以有效理解线程运行顺序.(复杂的多线程程序可以通过设置线程优先级实现
- 本文实例为大家分享了python点球小游戏的具体代码,供大家参考,具体内容如下1.游戏要求: 设置球的方向:左中右三个方向,射门或者扑救动作
- 1、定义路由// 阿里云文件储存Route::group(['prefix'=>'aliyun'],
- 1. base64编码简介用记事本打开exe、jpg、pdf这些文件时,我们都会看到一大堆乱码,因为二进制文件包含很多无法显示和打印的字符,
- 背景:线上机器,需要过滤access日志,发送给另外一个api期初是单进程,效率太低,改为多进程发送后,查看日志中偶尔会出现异常错误(忘记截
- 实验名称:网络聊天室功能:i. 掌握利用Socket进行编程的技术ii. 掌握多线程技术,保证双方可以同时发送iii. 建立聊天工具iv.
- 做一个项目用到Ajax,开始觉得挺好,后来发现一个问题,例如删除一项,恢复之后就不能再接着删除,必须要等一段时间,后来知道是IE缓存的问题。
- 原来看到这个代码的时候,觉得功能不错,调试并整理了一下也许大家用的到,对于越来越注重用户体验的今天,这种功能一定很受欢迎,当然本例子只是一个
- 今天写的代码片段:X = Y = []..X.append(x)Y.append(y)其中x和y是读取的每一个数据的xy值,打算将其归入列表
- 外键在 MySQL 中,表有两种引擎,一种是 InnoDB ,另外一种是 myisam 。如果使用的是 InnoDB 引擎,是支持外键约束的
- 前言可选链操作符(?.)允许读取位于链接对象链身处的属性的值,而不必明确验证链中的每个引用是否有效。不同之处在于,在引用为空(null或者u
- 用dicompyler软件打开dicom图像,头文件如图所示:当然也可以直接读取:ds = dicom.read_file('H:\
- 前言这里给大家介绍一下利用Pycharm如何打包文件,并为文件设置图标。一、下载pyinstaller库1)点击win+r,输入cmd打开控
- python提供了大量的库,可以非常方便的进行各种操作,现在把python中实现读写csv文件的方法使用程序的方式呈现出来。在编写pytho
- 前言:在使用DDT数据驱动+HTMLTestRunner输出测试报告时遇到过2个问题:1、生成的测试报告中,用例名称后有dict() -&g
- 一、绑定方法1.对象的绑定方法首先我们明确一个知识点,凡是类中的方法或函数,默认情况下都是绑定给对象使用的。下面,我们通过实例,来慢慢解析绑
- 环境centos7django 1.11nginx白话我们可以使用Template 设置我们的网页,同时,一个完美的网页需要css,js,i
- 准备工作:python:https://www.python.org/downloads/Dev-C++:https://sourcefor
- 如何制作一个防止多次刷新计数的图片计数器?请问如何做一个专业的图片计数器? <%countlong