Python入门:认识列表和元组
作者:city_water 发布时间:2022-11-06 02:18:42
列表和元组,都是一个可以放置任何数据类型的有序集合。
列表的特性
动态的(mutable):长度大小不固定,可以随意地增加、删减或者改变元素。
会修改原来列表中的元素,而不会创建新的列表。
# 新建一个列表
l = [1, 2, 'hello', 'world']
# 输出列表
l
# 显示内容
[1, 2, 'hello', 'world']
# 访问列表元素
l[3] = 3 # 列表允许访问第4个元素,并修改
# 输出列表
l
# 显示内容
[1, 2, 'hello', 3]
# 添加元素
l.append(5) # 把元素5 添加到列表后面
# 输出列表
l
# 显示内容
[1, 2, 'hello', 3, 5]
元组的特性
静态的(immutable):长度大小固定,无法增加删减或者改变。
若要改变元组内的数据,只能新开一块内存,新建一个元组。
# 新建一个元组
tup = ('jason', 22)
# 输出元组
tup
# 显示内容
('jason', 22)
# 不能对元组直接操作,需要新建一个新元组
net_tup = tup + (5, ) # 创建新的元组new_tup 后,以此填充元素,新增元素后的',' 不可以省略
# 输出元组
net_tup
# 显示内容
('jason', 22, 5)
两者支持的操作
负数索引
列表和元组都支持负数索引,-1 表示倒数第一个元素,-2 表示倒数第二个,以此类推。
l = [1, 2, 'hello', 3, 5]
l[-1] # 列表的负数索引
# 显示内容
5
tup = ('jason', 22)
tup[-1] # 元组的负数索引
# 显示内容
22
切片操作
切片操作指的是,输出规定范围内 [start : end]的所有元素,但不包含最后一位。
例如 [0:3] 就是从下标0 开始,一直输出到下标2(3-1) 。
l = [1, 2, 'hello', 3, 5]
l[0:3] # 列表的切片操作
# 显示内容
[1, 2, 'hello']
tup = ('jason', 22)
tup[0:2] # 元组的切片操作
# 显示内容
('jason', 22)
随意嵌套
new_l = [[1, 2, 3], [4, 5]] # 嵌套列表
new_l
# 显示内容
[[1, 2, 3], [4, 5]]
new_tup = ((1, 2, 3,), (4, 5, 6)) # 嵌套元组
new_tup
# 显示内容
((1, 2, 3), (4, 5, 6))
相互转换
list((1, 2, 3)) # list() 函数把元组转化成列表
tuple([1, 2, 3]) # tuple() 函数把列表转化成元组
常用内置函数
count(item) 统计列表 / 元组中 item 出现的次数
index(item) 返回列表 / 元组中 item 第一次出现的索引
list.reverse() and list.sort() 只能对列表应用
list.reverse() 原地倒转列表
list.sort() 排序
reversed() and sorted()
返回一个倒转后的迭代器,使用list() 将其转换成列表
reversed() 对列表 / 元组进行倒转
sorted() 对列表 / 元组进行排序
返回排好序的新列表
存储方式的差异
l = [1, 2, 3]
l.__sizeof__()
64
tup = (1, 2, 3)
tup.__sizeof__()
48
存储同样的内容,列表却比元组多用了16字节。
列表是动态,需要指针来指向对应的元素。
列表它可变,需要额外存储已经分配的长度大小,追踪列表空间使用的情况,当空间不足时,可以及时分配额外空间。
存储指针的空间长度的存储空间各为8 字节。
列表初始空间是:40,添加字符后会扩展4个元素的空间:32,所以是:72字节。当需要存储的元素空间大于存储空间时,列表会新增4个元素的空间:32。
这样的增加 / 删减操作机制(over-allocating)保证了其操作的有效性,增加 / 删减的时间复杂度均为O(1)
性能对比
元组比列表更加轻量级一些,从总体来讲,元组的性能速度要略优于列表。
Python 会在后台对静态数据做一些资源缓存(resource caching)
垃圾回收机制,当一些变量不被使用了,Python 就会回收它们所占用的内存,返还给操作系统,以便其他变量或其他应用使用。
但元组不被使用并且占用空间不大时,Python 会暂时缓存这一部分。下次调用时,Python 会直接用这块缓存的内存空间,大大加快程序的运行速度。
初始化一个相同元素的列表和元组,元组的速度比列表快5倍。
索引操作,两者速度差别非常小,几乎可以忽略不计。
增加 / 删减或改变元素,列表更优。元组需要新建一个元组。
两者的使用场景
存储的数据和数量不变,选用元组合适。存储的数据或数量是可变的,选择列表更合适。
来源:https://blog.csdn.net/weixin_43776724/article/details/120856567
猜你喜欢
- 本文实例讲述了Python正则表达式分组概念与用法。分享给大家供大家参考,具体如下:正则表达式分组分组就是用一对圆括号“()”括起来的正则表
- js汉字简繁转换源代码:<html> <head> <title>汉字简繁转换工具_asp之家</
- 目录1. 术语说明2. 简单字段名2.1 简单字段名的说明2.2 省略字段名2.3 数字形式的简单字段名2.4 变量名形式的简单字段名2.5
- 前言这篇博客针对《PPython+Qt身体特征识别人数统计》编写代码,功能包括了相片,摄像头身体识别,数量统计。代码整洁,规则,易读。应用推
- 本文以实例详解了python的迭代器与生成器,具体如下所示:1. 迭代器概述: 迭代器是访问集合元素的一种方式。迭代器对象从集合的
- 最近基于selenium写了一个python小工具,记录下学习记录,自己运行的环境是Ubuntu 14.04.4, Python 2.7,C
- 最近尝试了mysql的最新版本5.5.581.最新发布的mysql 5.5.8没有适合solaris 9的版本;这个在安装时需要注意2.它发
- Django的信号Django的信号机制不同于Linux的信号机制,Django 中的信号用于在框架执行操作时解耦。当某些动作发生的时候,系
- 本文实例讲述了Python实现的企业粉丝抽奖功能。分享给大家供大家参考,具体如下:一 代码def scode9(schoice): &nbs
- 引言在利用Python解决各种实际问题的过程中,经常会遇到从某个对象中抽取部分值的情况,切片操作正是专门用于完成这一操作的有力武器。理论上而
- 查询一天:select * from table where to_days(column_time) = to_days(now());s
- <div id="d1"></div> <script > fu
- 要求利用python实现禁用键盘鼠标思路经过查阅资料目前最好的办法是采用ctypes中的dll文件进行编写from ctypes impor
- 继上一篇中间表的数据是动态的,图表展示的数据才比较准确。这里用到一个新的模块Djcelery,安装配置步骤如下:1.安装redis==2.1
- 1.首先到jetbrains下载专业版 https://www.jetbrains.com/pycharm/download/#sectio
- 本文实例为大家分享了opencv转换颜色空间更改图片背景的具体代码,供大家参考,具体内容如下思路:1、将BGR转换为HSV颜色空间 2、设置
- Python-pip安装失败问题一、问题描述root@ubuntu:/home/chao# apt-get install python-p
- 之前画图一直在用matlibplot、pyecharts,最近学习了一个新的可视化库–cufflinks,用了两天我已经深深爱上它了主要是因
- Python3的 元组(Tuple)Python 的元组与列表类似,不同之处在于元组的元素不能修改。元组使用小括号 ( ),列表使用方括号
- 本文实例讲述了Python图像处理之简单画板实现方法。分享给大家供大家参考,具体如下:Python图像处理也是依赖opencv的Python