Python入门:认识列表和元组

目录
  • 列表的特性
  • 元组的特性
  • 两者支持的操作
    • 负数索引
    • 切片操作
    • 随意嵌套
    • 相互转换
  • 常用内置函数
    • 存储方式的差异
    • 性能对比
    • 两者的使用场景
  • 总结
    • 提问:两个创建空列表的方法,哪个更快。

列表和元组,都是一个可以放置任何数据类型的有序集合。

列表的特性

动态的(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()
    • reversed() 对列表 / 元组进行倒转

      • 返回一个倒转后的迭代器,使用list() 将其转换成列表
  • 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倍。

索引操作,两者速度差别非常小,几乎可以忽略不计。

增加 / 删减或改变元素,列表更优。元组需要新建一个元组。

两者的使用场景

存储的数据和数量不变,选用元组合适。存储的数据或数量是可变的,选择列表更合适。

总结

列表和元组都是有序,可以存储任何数据类型的集合。

区别:

列表是动态,长度可变。可以增加、删除、修改元素,存储空间略大于元组,性能略逊于元组。

元组是静态的,长度固定。不可以对元素进行操作,元组对于列表来说更加轻量级,性能稍优。

提问:两个创建空列表的方法,哪个更快。

# option A
empty_list = list()
# option B
empty_list = []

自答:我认为option B 更快一些,它直接创建了一个空列表。但option A 是通过list() 进行转换的。

解答:[ ] 是一个内置的C 函数,直接被调用。而list 是一个function call,Python 的function call 会创建stack,并且进行一系列参数检查的操作,比较expensive。

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注我们的更多内容!

(0)

相关推荐

  • python中的列表和元组区别分析

    列表(list)和元组(tuple)的一些基础 list和tuple都是一个可以放置任意数据类型的有序集合,都是既可以存放数字.字符串.对象等 list和tuple都支持负索引 In [8]: nums[-2] Out[8]: 'ad' In [9]: tp[-2] Out[9]: '33' list和tuple都支持切片操作 In [10]: nums[1:3] Out[10]: [3, 'ad'] In [11]: tp[1:3] Out[11]: (3, '33') list和tuple都

  • Python内置数据结构列表与元组示例详解

    目录 1. 序列 2. 列表 2.1 列表的特性 2.1.1 列表的连接操作符和重复操作符 2.1.3 列表的索引 2.1.4 列表的切片 2.1.5 列表的循环(for) 2.2 列表的基本操作(增删改查) 2.2.1 列表的增加 2.2.2 列表的修改 2.2.3 查看 2.2.4 列表的删除 2.2.5 其他操作 3. 元组 3.1 元组的创建 3.2 元组的特性 3.3 元组的命名 4. 深拷贝和浅拷贝 4.1 值的引用 4.2 浅拷贝 4.3 深拷贝 5. is 和 ==的对比 总结

  • Python的列表和元组详情

    目录 一.Python 列表(list) 1.序列介绍 2.列表的概述 3.创建列表 4.列表的索引 5.列表的分片 6.列表的分片赋值 7.循环遍历列表 8.查找元素与计数 9.列表增加元素 10.列表删除元素 11.列表排序 二. Python 元组(tuple) 1.为什么要将元组设计成为不可变序列 2.创建元组 3.元组的遍历 4.元组的内置函数 一.Python 列表(list) 1.序列介绍 序列是Python中最基本的数据结构.序列中的每个元素都分配一个数字 - 它的位置,或索引,

  • python中列表(list)和元组(tuple)的深入讲解

    前言 在我们实际开发中,经常需要将一组数据存储起来,以便使用.如果学习了其他的语言可能知道数组(Array)这个数据结构,它就可以将多个数据进行存储,访问数据可以通过数组下标的方式,的进行获取.如果你是python开发者,那么可以使用更加灵活的列表(list)和元组(tuple),来进行数据储存.下面我们先简单了解下列表和元组的基本使用. 列表 列表是动态的,长度可以改变,可以随意增加,修改或删除元素. 初始化列表 a = list() b = [] # 可以通过range快速创建list c

  • python中必会的四大高级数据类型(字符,元组,列表,字典)

    一. 字符串 生活中我们经常坐大巴车,每个座位一个编号,一个位置对应一个下标. 字符串中也有下标,要取出字符串中的部分数据,可以用下标取. python中使用切片来截取字符串其中的一段内容,切片截取的内容不包含结束下标对应的数据. 切片使用语法:[起始下标:结束下标:步长] ,步长指的是隔几个下标获取一个字符. 注意:下标会越界,切片不会 常用函数 练习: Test='rodma ' print(type(Test)) print('Test的一个字符串%s'%Test[0])#跟数组差不多 #

  • Python数据结构之列表与元组详解

    目录 Python 列表(list): 1.序列介绍: 2.列表的概述: 3.创建一个列表 4.列表的索引 5.列表的分片 6.列表的分片赋值 7.循环遍历列表 8.查找元素与计数 9.列表增加元素: 10.列表删除元素: 11.列表排序 Python 元组(tuple): 1.为什么要将元组设计成为不可变序列 2.创建元组 3.元组的遍历 4.元组的内置函数 Python 列表(list): 1.序列介绍:   序列是Python中最基本的数据结构.序列中的每个元素都分配一个数字 - 它的位置

  • Python入门:认识列表和元组

    目录 列表的特性 元组的特性 两者支持的操作 负数索引 切片操作 随意嵌套 相互转换 常用内置函数 存储方式的差异 性能对比 两者的使用场景 总结 提问:两个创建空列表的方法,哪个更快. 列表和元组,都是一个可以放置任何数据类型的有序集合. 列表的特性 动态的(mutable):长度大小不固定,可以随意地增加.删减或者改变元素. 会修改原来列表中的元素,而不会创建新的列表. # 新建一个列表 l = [1, 2, 'hello', 'world'] # 输出列表 l # 显示内容 [1, 2,

  • Python 字符串、列表、元组的截取与切片操作示例

    本文实例讲述了Python 字符串.列表.元组的截取与切片操作.分享给大家供大家参考,具体如下: demo.py(字符串.列表.元组的截取): # 切片(截取) [开始索引:结束索引:步长] 步长默认为1 结束索引默认截取到末尾 # 字符串的截取 print("012345"[1:3]) # 12 # 列表的截取 print([0,1,2,3,4,5][1:3]) # [1, 2] # 元组的截取 print((0,1,2,3,4,5)[1:3]) # (1, 2) # 字典的元素是无

  • Python字符串、列表、元组、字典、集合的补充实例详解

    本文实例讲述了Python字符串.列表.元组.字典.集合.分享给大家供大家参考,具体如下: 附加: python的很多编译器提供了代码补全功能,并且在填入参数时提供提示功能 字符串 1.常用函数: 字符串是不可变对象,字符串的方法都不会改变原字符串的数据 s=" hEllo world!\t " print("s.capitalize():",s.capitalize())#标题格式化 print("s.center(20,'-'):",s.ce

  • python数据结构之列表和元组的详解

    python数据结构之 列表和元组 序列:序列是一种数据结构,它包含的元素都进行了编号(从0开始).典型的序列包括列表.字符串和元组.其中,列表是可变的(可以进行修改),而元组和字符串是不可变的(一旦创建了就是固定的).序列中包含6种内建的序列,包括列表.元组.字符串.Unicode字符串.buffer对象.xrange对象. 列表的声明: mylist = [] 2.列表的操作: (1) 序列的分片: 用法:mylist[startIndex:endIndex:step] exam: myli

  • Python数据类型之列表和元组的方法实例详解

    引言 我们前面的文章介绍了数字和字符串,比如我计算今天一天的开销花了多少钱我可以用数字来表示,如果是整形用 int ,如果是小数用 float ,如果你想记录某件东西花了多少钱,应该使用 str 字符串型,如果你想记录表示所有开销的物品名称,你应该用什么表示呢? 可能有人会想到我可以用一个较长的字符串表示,把所有开销物品名称写进去,但是问题来了,如果你发现你记录错误了,想删除掉某件物品的名称,那你是不是要在这个长字符串中去查找到,然后删除,这样虽然可行,那是不是比较麻烦呢. 这种情况下,你是不是

  • Python入门之列表用法详解

    目录 列表是什么 列表的CRUD 创建列表 访问列表中的值 更新列表 删除元素 拼接列表 列表相乘 判断 遍历列表 列表常用方法 获取列表长度 列表后面添加元素 指定位置添加元素 删除元素 返回的是某个元素在列表里面的个数 合并列表 返回的是元素在列表中的第一个位置 排序 将列表进行翻转 清除列表 浅拷贝列表 深拷贝列表 列表是什么 列表是元素的集合,存储在一个变量中. 列表中存储的元素类型没有限制,根据需要动态分配和回收内存 列表中的每个元素都会分配一个数字用来表示它的位置(索引),第一个索引

  • Python学习之列表和元组的使用详解

    目录 列表和元组简介 列表学习要点 列表的声明语法 列表的读取 列表操作 列表元素的修改和删除 列表元素合并 列表元素顺序变化 元组学习要点 元组基本知识 元组的基本操作 列表和元组简介 如果说在 Python 语言中找一个最优秀的数据类型,那无疑是列表,如果要在推荐一个,那我选择元组,本篇博客我们的重心会放在列表上,元组可以看成不能被修改的列表,所以作为赠品 进行学习即可. 列表是一种非常灵活的数据结构,可以弥补前文字符串类型的很多不足. 正式学习前,还需要记住两个英文单词,列表(list),

  • python中的列表与元组的使用

    在python中的数据类型和控制流这篇文章中我们提到过列表,它是基本的数据类型之一. 通俗来说,它就是用来存储一系列数据的.比如存储一个班级的学生. 列表中的每个元素可以通过下标(索引)访问,索引从0开始. 既然列表存储的是一系列值,这必然存在「增删改查」的情况,就像一个班级的学生,有进入学的,也有退学的. 接下来我们来说说,首先我们先从列表的创建开始. 创建列表 list = [ele1 , ele2 , elem3 , ... , elen] 比如,创建一个数字列表或英文字符列表 nums

  • Python入门基本操作列表排序用法详解

    目录 列表的举例 1.访问python列表中的元素 2.python列表的切片 3.python列表的排序 4.Python列表元素的添加 5.Python列表元素的删除 列表是最常用的Python数据类型,它可以作为一个方括号内的逗号分隔值出现.列表的数据项可以是不同的类型,可以是字符串,可以是数字类型,甚至是列表,元组,只要用","逗号分隔开,就是一个元素. 列表的举例 1.访问python列表中的元素 通过索引直接访问元素,访问单个元素的基本格式为: 列表名[索引值]:访问多个元

随机推荐