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,列表,元组
0
投稿

猜你喜欢

  • python中的计时器timeit的使用方法

    2023-04-24 14:50:56
  • tensorflow2.0保存和恢复模型3种方法

    2023-03-07 01:06:03
  • vue+swiper实现组件化开发的实例代码

    2024-06-05 15:30:09
  • Python利用Pydub实现自动分割音频

    2022-10-08 22:02:48
  • Go语言实现请求超时处理的方法总结

    2024-04-23 09:37:50
  • Go语言中并发的工作原理

    2024-05-08 10:13:25
  • 详细讲解Python中的文件I/O操作

    2022-01-01 19:04:53
  • tensorflow中Dense函数的具体使用

    2021-04-26 17:01:49
  • 9种使用Chrome Firefox 自带调试工具调试javascript技巧

    2023-07-19 01:03:48
  • mcrypt启用 加密以及解密过程详细解析

    2023-07-15 19:41:55
  • Oracle中pivot函数图文实例详解

    2023-07-12 22:13:49
  • pytorch绘制并显示loss曲线和acc曲线,LeNet5识别图像准确率

    2023-01-06 11:04:09
  • 使用python远程操作linux过程解析

    2021-12-01 21:05:27
  • Python使用matplotlib绘制多个图形单独显示的方法示例

    2022-02-13 09:45:44
  • js读写COOKIE实现记住帐号或密码的代码(js读写COOKIE)

    2024-04-18 10:11:12
  • 让JavaScript拯救HTML5的离线存储[译]

    2009-05-15 12:26:00
  • Python利用operator模块实现对象的多级排序详解

    2023-09-26 20:11:09
  • 初学MySql5 所应了解的知识和常见问题

    2009-03-06 17:49:00
  • Python2.7环境Flask框架安装简明教程【已测试】

    2023-12-17 11:59:42
  • javascript拼音搜索引擎

    2011-08-29 15:42:14
  • asp之家 网络编程 m.aspxhome.com