Python中的列表跟元组的使用教学
admin
2023-06-27 02:22:39
0次

  Python 中的 列表跟元组 的使用

  一、列表和元组基础:

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

  在很多语言中,集合的数据类型必须一致。不过,对于 Python 的列表和元组来说,并无此要求:

  my_list = [66, 77, 'fe', 'cow'] # 列表中同时含有int和string类型的元素

  print(my_list)

  # 输出结果: [66, 77, 'fe', 'cow']

  my_tuple = ('fe_cow', 666) # 元组中同时含有int和string类型的元素

  print(my_tuple)

  # 输出结果 ('fe_cow', 666)

  那么它们之间有什么区别呢?

  列表是动态:长度大小不固定,可以随意地增加、删减或者改变元素。

  元组是静态:长度大小固定,无法增加删减或者改变。

  下面举个栗子:

  分别创建一个列表和元组。对于列表很轻松的在列表中添加最后一个元素,但是相同操作元组就会报错:

  my_list = [1, 2, 3, 4]

  my_list[3] = 5 # python 中索引是从0进行开始的 my_list[3] 表示访问列表的第四个元素

  print(my_list)

  # 输出结果: [1, 2, 3, 5]

  my_tuple = (1, 2, 3, 4)

  my_tuple[3] = 5

  print(my_tuple)

  # 报错结果:

  Traceback (most recent call last):

  File "", line 1, in

  TypeError: 'tuple' object does not support item assignment

  如果想对已有的元组做"改变",那就只能重新开辟一块内存,创建新的元组了。

  my_tuple= (1, 2, 3)

  new_tuple = my_tuple + (4, )

  print(new_tuple)

  # 输出结果: (1, 2, 3, 4)

  Python 中的列表和元组都支持负数索引:

  // 列表的负数索引

  my_list = [1, 2, 3, 4]

  my_list[-1]

  4

  // 元组的负数索引

  my_tuple = (1, 2, 3, 4)

  my_tuple[-2]

  3

  -1 表示最后一个元素,-2 表示倒数第二个元素,以此类推。

  Python 列表和元组都支持切片操作:

  // 列表切片操作

  my_list = [1, 2, 3, 4]

  my_list[1:3]

  [2, 3]

  // 元组切片操作

  my_tuple = (1, 2 ,3 ,4)

  my_tuple[1:3]

  (2, 3)

  索引从1到2,简单理解:“前闭后开”

  Python 可通过list() 和 tuple() 函数相互转换:

  // 元组转换成列表

  list((1, 2, 3))

  [1, 2, 3]

  // 列表转换成元组

  tuple([1, 2, 3])

  (1, 2, 3)

  Python 列表 和 元组的常见内置函数:

  // 列表操作

  my_list = [3, 2, 3, 7, 8, 1]

  my_list.count(3)

  2

  my_list.index(7)

  3

  my_list.reverse()

  my_list

  [1, 8, 7, 3, 2, 3]

  my_list.sort()

  my_list

  [1, 2, 3, 3, 7, 8]

  // 元组操作

  my_tuple = (3, 2, 3, 7, 8, 1)

  my_tuple.count(3)

  2

  my_tuple.index(7)

  3

  list(reversed(my_tuple))

  [1, 8, 7, 3, 2, 3]

  sorted(my_tuple)

  [1, 2, 3, 3, 7, 8]

  count(item):表示统计列表 / 元组中 item 出现的次数。

  index(item):表示返回列表 / 元组中 item 第一次出现的索引。

  list.reverse() 和 list.sort() 分别表示原地倒转列表和排序。

  注意,元组没有内置的这两个函数,需要把元组转换成列表在进行此函数的操作

  reversed() 和 sorted() 同样表示对列表 / 元组进行倒转和排序,但是会返回一个倒转后或者排好序的新的列表 / 元组。

  二、列表和元组存储方式差异:

  // 使用__sizeof__() 查看 存储空间

  my_list = [1,2 ,3 ,4]

  my_list.__sizeof__()

  72

  my_tuple = (1, 2, 3, 4)

  my_tuple.__sizeof__()

  56

  可以看到,放置了相同的元素,那么元组存储的空间却比列表要少16字节。为什么呢?原因如下:

  列表是动态的,所以它需要存储指针,来指向对应的元素(int型,8字节)。

  列表可变,所以需要额外存储已经分配的长度大小(8 字节),这样才可以实时追踪列表空间的使用情况,当空间不足时,及时分配额外空间。

  下面描述列表空间分配过程:郑州人流价格 http://www.zzzykdfk.com/

  my_list = []

  my_list.__sizeof__() // 空列表的存储空间为40字节

  40

  my_list.append(1)

  my_list.__sizeof__()

  72 // 加入了元素1之后,列表为其分配了可以存储4个元素的空间 (72 - 40)/8 = 4

  # 记录往后加入4个元素

  my_list.append(2)

  my_list.__sizeof__()

  72 // 由于之前分配了空间,所以加入元素2,列表空间不变

  my_list.append(3)

  my_list.__sizeof__()

  72 // 加入元素3,列表空间不变

  my_list.append(4)

  my_list.__sizeof__()

  72 // 加入元素4,列表空间不变

  my_list.append(5)

  my_list.__sizeof__()

  104 // 加入元素5之后,列表的空间不足,所以又额外分配了可以存储4个元素的空间

  为了减少列表每次的增加/删除操作时空间分配的开销,Python每次分配空间时,都会额外多分配一些;

  这样机制保证了其操作的高效性:增加/删除的时间复杂度0(1);

  对于元组来说,元组长度大小固定,元素不可变,所以存储空间固定。

  三、列表和元组的性能:

  从上述的两者之间的存储方式差异,可以得出结论,元组要比列表更加轻量级一些,元组的性能速度要略优于列表。

  在Python后台,对静态数据做一些资源缓存。因为垃圾回收机制的存在,如果一些变量不被使用了,Python 就会回收它们所占用的内存,返还给操作系统,以便其他变量或其他应用使用。

  对于一些静态变量,比如元组,它不被使用并且占用空间不大时,Python 会暂时缓存这部分内存。下次我们再创建同样大小的元组时,Python 就不用再向操作系统发出请求,可直接寻找内存,而是可以直接分配之前缓存的内存空间,这样就能大大加快程序的运行速度。

  四、列表和元组的使用场景:

  如果存储的数据和数量不变,仅需要将数据直接传给前端渲染,那么肯定选用元组更合适。

  // 比如给前端返回经纬度

  def get_location():

  .....

  return (longitude, latitude)

  如果存储的数据或数量是可变的,那么则用列表更合适。

  // 比如给前端返回 每个增加教师的信息

  teacher_list = [] // 里面存储的是

  result = DB(teacherID) // 从数据库拿出一周内新增教师的信息,返回的是QuerySet

  for item in result:

  teacher_list.append(item)

  五、总结:

  列表和元组都是有序的,可以存储任意的数据类型的集合,主要区别在于:

  列表是动态的,长度可变,可以随意的增加、删减或改变元素。

  列表的存储空间略大于元组,性能略逊于元组;

  元组是静态的,长度大小固定,不可以对元素进行增加、删减或者改变操作。

  元组相对于列表更加轻量级,性能稍优;

  六、list()、与 [ ] 效率有什么区别吗?

  区别在于:

  list( ) 是一个函数的调用,Python 函数调用 会创建 堆,并且进行一系列参数检查的操作。

  [ ] 是一个 内置的C函数,可以直接调用,因此效率较高。


相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...