编程学习
🐍Python(1)数组浅析:列表+元组+数组+双端队列
00 分钟
2023-4-14
2023-11-23
type
status
date
slug
summary
tags
category
icon
password
Email

Python标准库的序列类型

按照能够被修改来分组:
可变序列
  • list
  • bytearray
  • array.array
  • collections.deque
  • memoryview
不可变序列
  • tuple
  • str
  • bytes

还可以按照存储方式来划分:
容器序列:能够存放不同类型的数据,并且存放的是对象的引用。
  • list
  • tuple
  • collections.deque
扁平序列:只能容纳一种类型,并且存储的是值不是引用。
  • str
  • byte
  • bytearray
  • memoryview
  • array.array

列表

列表是最简单的数据类型,相当于数组。
  1. 列表的基础操作函数
  1. 列表模拟栈
  1. 队列
  1. 列表推导式
以下是列表的常见操作
 

列表推导式

利用列表推导式生成笛卡尔积:
列表推导式的作用:生成列表

生成器表达式

用于初始化元组,数组或者其他序列类型。
生成器表达式相对于列表推导式的优势:可以逐个的产生元素,而不是先建立一个完整的列表,再把整个列表传递给构造函数,显然第一个会节省内存。

元组和序列

元组是python的一种标准序列类型
一个元组由数个 逗号 组成:
元组始终携带括号
元组是不可变的,因此不能给一个元组的某一个元素赋值。
元组和列表的区别:
  1. 元组是不可变的,并且元组的一个嵌套括号内可以包含多种不同类型的值,可以通过索引访问
  1. 列表是可变的,并且只包含同一种类型的值,可以通过迭代访问

注意:
创建一个空元组? 直接输入一个括号即可。
创建一个只含元素的元组? 需要输入 元素,

元组的拆包

元组拆包的方式:
  1. 平行赋值。
  1. 拆分元素,作为函数的参数。
  1. 函数以元组的形式返回多个值
用* 处理剩下的元素:
注意只能出现一个 * 的变量,并且位置可以是随意的。

嵌套元组拆包

只需要这个嵌套结构满足元组本身的嵌套结构,便可以拆包

具名元组

如何使得元组为一个带字段名类名的元组?使用 namedtuple 即可。
namedtuple 中:
  1. 一个是类名
  1. 一个是各个字段的名字,可以是可迭代对象,也可以是由空格分开的字符串。
常见属性与方法:
  • _fields:返回这个所有的字段名
  • _make(xxx):接受一个可迭代对象,返回这个类的实例
  • _asdict():友好的展示元组信息。

元组的不可变性质

所有的对于元组自身的增减操作都是非法的,对于列表来说是可以的,所以元组是不可变列表,列表是可变的。
  • 所有的有 __ixxx__ :都是对自身的操作,元组违法。
  • 类似的 append 或者 remove :增减操作元组是非法的。

array数组

array数组对于一个只含数字的序列来说, array.array 比list更加高效。
数组基本上支持所有的可变序列具有的操作,而且还具有其他的对文件的操作,可以进行更快的文件操作。
array对于文件的操作举例:

双端队列

类似于c++的 deque 一样,能够对数组提供更高效的双端的服务:

 

循环技巧

在字典中,使用 items() 函数来遍历键值对:
在列表中,使用 enumerate 获得索引值和数值:

使用 zip 打包需要同时循环的列表:

reversed 逆向打印:
去重排序 输出:首先转换为集合,然后再sorted:

常用数组操作总结

操作函数 操作功能
__add__
a+b 不是原地操作
__iadd__
a+=b 原地操作
append
末尾追加一个元素
appendleft
最左边添加一个元素
clear
清除元素
__contains__
是否存在某个元素
copy
浅拷贝
__copy__
对 copy.copy的支持
count
某个元素的出现次数
__delitem__
位置p的元素删除
extend
添加一个可迭代对象到末尾
extendleft
添加一个可迭代对象到最左边
__getitem__
获取位置p的元素
index
元素num在序列中第一次出现的位置
insert
插入一个元素在指定的位置
__iter__
返回迭代器
__len__
序列的长度
__mul__
重复拼接
__imul__
就地重复拼接
__rmul__
反向重复拼接
pop
弹出最后的元素并且返回值
popleft
弹出最左边的元素
remove
移除第一次出现的某元素
reverse
翻转
__reversed__
返回一个从尾部往前扫描的迭代器
rotate
n个元素从队尾移到队头
__setitem__
把位置p的元素换为x
sort
排序
 

评论
  • Twikoo
  • Valine