原创| 你可能真的不太了解列表和元组

简介: 原创| 你可能真的不太了解列表和元组

前言

今天开始来写Python基础方面(基础中附带进阶知识)的知识,虽说是基础,但是很多小伙伴可能也不能完全熟练掌握这些知识点。今天我们来讲的是python中的列表和元组。


列表和元组

不管我们学习什么语言都会有集合这个概念。列表和元组就是有序集合。在集合里我们可以放置任意的数据类型,像一些字符串、整数、对象等等。当然有一些语言里的集合需要同一类型才行,但是在Python中就没有这个限制。


1.初印象

说了这么多,大家可能还是不知道啥是列表,啥是元组,直接看我下面的例子:


>>> l = [1,2,'a','b']
>>> l
[1, 2, 'a', 'b']
>>> tup = (1,2,'a','b')
>>> tup
(1, 2, 'a', 'b')


1.jpg


我们在编辑器中定义了一个列表l和一个元组tup,然后填入了相应的数据。相信大家看到这里就对元组和列表有个初印象了。


2.两者区别

相信大家内心有个疑问,都是能够放入不同类型的集合,那有啥区别

  • 列表是动态的,长度大小不固定,可以随意地增加、删减或者改变元素
  • 元组是静态的,长度大小固定,无法增加删减或者改变

直接上例子给大家看看:


>>> l[1] = 100
>>> l
[1, 100, 'a', 'b']
>>> tup[1] = 100
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment>>> l[1] = 100
>>> l
[1, 100, 'a', 'b']
>>> tup[1] = 100
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment


2.jpg


大家可以看到,我们将list中索引值为1的值改为100是成功的,但是去修改元组时就报错了。

但是,这里就引申了一个问题---如何修改元组的值

唯一的办法就是开辟一块新的内存空间,说简单点就是你需要重新创建一个元组,然后拼接上去。例如我想在tup上新增一个数字100:


>>> tup1 = tup+(100,)
>>> tup1
(1, 2, 'a', 'b', 100)


3.jpg


看上去就比较难受,所以该用啥时就用啥,list它不香吗?


3.list和tuple的骚操作

其实这里讲的就是list和tuple里一些内置函数。我直接通过代码的形式来给大家讲解了。

3.1 负索引


>>> l
[1, 100, 'a', 'b']
>>> tup
(1, 2, 'a', 'b')
>>> l[-1]
'b'
>>> tup[-1]
'b'


大家可以看到列表和元组都支持负索引,简单点说就是一个倒着的索引,可以反向取值。

-1表示倒数第一个值,-2表示倒数第二个值....

3.2 切片操作


>>> l[1:3]
[100, 'a']
>>> tup[1:3]
(2, 'a')


大家看到上面的代码,可以发现我们可以获取列表或者元组中某个区间的值,这就是切片操作。

3.3 count()


>>> l = [1,2,3,3,3,4,4,4,4,12]
>>> l.count(3)
3
>>> l.count(4)
4
>>> tup.count(1)
1


计算出list或者tuple中元素出现的次数

3.4 index()


>>> l = [1,2,3,3,3,4,4,4,4,12]
>>> l.index(12)
9
>>> tup
(1, 2, 'a', 'b')
>>> tup.index(2)
1


返回某值得索引值

3.5 reverse()


>>> l
[1, 2, 3, 3, 3, 4, 4, 4, 4, 12]
>>> l.reverse()
>>> l
[12, 4, 4, 4, 4, 3, 3, 3, 2, 1]


将列表中的数据逆序排列。大家可能注意到元组是没有这个函数的,是因为元组不可以改变其内容。

但是也还是有办法将元组逆序,只不过需要转化为list。

3.6 sorted()


>>> l=[2,3,1,123,33,23]
>>> sorted(l)
[1, 2, 3, 23, 33, 123]


将列表安装顺序排序。


4.list和tuple的存储方式和性能

首先我们来看一段代码:


>>> l = [1,2]
>>> tup=(1,2)
>>> l.__sizeof__()
56
>>> tup.__sizeof__()
40


我们可以发现列表比元组大了16个字节,为什么呢?原因在于list是属于动态的,就类似链表,需要一个空间来存储指针(学过C语言的朋友应该很熟悉),存储指针花了8个字节,另外8个字节是存储已经分配的长度大小,因为列表属于可变的,我们需要随时知道它的空间大小情况。


>>> l = []
>>> l.__sizeof__()
40
# 第一次变化
>>> l.append(1)
>>> l.__sizeof__()
72
>>> l.append(2)
>>> l.__sizeof__()
72
>>> l.append(3)
>>> l.__sizeof__()
72
>>> l.append(4)
>>> l.__sizeof__()
72
# 第二次发生变化
>>> l.append(5)
>>> l.__sizeof__()
104


重点:大家看到上面的代码可以发现,当我们给列表添加一个数据时,会为我们提供32个字节的存储空间,换算成int 8字节,也就是提供了4个int值得空间给我们,所以我们在添加4个数据之前,存储空间都是没有发生变化的,直到第五个值又给我们分配了32个字节。

关于它的存储我们就了解的差不多了,显而易见哪个的性能好。元组因为是不能够改变的,所以他所分配的存储空间也是固定的,所以元组的性能会比列表更好一筹。但是,这个得根据你实际开发情况而定。


结尾

本文到这里就结束了,如果大家希望能够继续看到更多有关于Python基础或者进阶的知识,可以疯狂的点在看,这篇文章在看超20,马上更新下一篇!欢迎来白嫖!

相关文章
|
3月前
|
存储 数据库 索引
Python新手常见问题一:列表、元组、集合、字典区别是什么?
本文针对Python编程新手常遇到的问题,详细阐述了列表(List)、元组(Tuple)、集合(Set)和字典(Dictionary)这四种数据结构的核心区别。列表是一种有序且可变的数据序列,允许元素重复;元组同样有序但不可变,其内容一旦创建就不能修改;集合是无序、不重复的元素集,强调唯一性,主要用于数学意义上的集合操作;而字典则是键值对的映射容器,其中键必须唯一,而值可以任意,它提供了一种通过键查找对应值的有效方式。通过对这些基本概念和特性的对比讲解,旨在帮助初学者更好地理解并运用这些数据类型来解决实际编程问题。
132 1
|
3月前
|
前端开发 JavaScript Java
通过学习mayfly,我学会了前端如何优雅设计字典值
`shigen`是一位擅长多种编程语言的博主,他在探索[mayfly-go](https://juejin.cn/post/7319365035552309248)项目后,发现了对枚举值管理的优雅设计。他分享了如何将字典和枚举值结构化,使用Vue+typescript实现更易维护的代码。通过创建`TagType`和`EnumValue`类,以及提供静态方法,实现了模块化和简洁的字典处理。示例展示了如何在页面中高效引用和显示字典数据,提高了代码的可读性和可维护性。
61 3
通过学习mayfly,我学会了前端如何优雅设计字典值
|
3月前
|
存储 索引 Python
【python学习】列表、元组、字典、集合,秋招是不是得到处面试
【python学习】列表、元组、字典、集合,秋招是不是得到处面试
|
3月前
|
存储 索引 Python
【Python指南 | 第四篇】列表、元组、集合及字典,这一篇就够了
【Python指南 | 第四篇】列表、元组、集合及字典,这一篇就够了
59 0
|
C语言 索引 Python
【Python编程】五、列表与元组
【Python编程】五、列表与元组
104 0
|
编译器 Python Windows
Python编程基础:实验2——列表及元组的使用
Python编程基础实验2——列表及元组的使用
396 0
Python编程基础:实验2——列表及元组的使用
|
索引 Python
Python语法之列表
我们都知道变量只能被赋值为一个值,现在我们想把八位神仙的名字同时赋值,该如何实现呢?在 Python 中,我们可以通过列表来实现。列表是有序数据的集合。定义的语法是使用方括号 [ ] 括起来以逗号分隔的数据。
62 0
Python语法之列表
|
存储 算法 C++
C++多元组tuple使用方法?你熟悉吗?快来看看吧
C++多元组tuple使用方法?你熟悉吗?快来看看吧
383 0
|
Python
Python基础题型实战09-用户通过提供所需下标的列表来获取列表的元素
一个人的成功一是看机遇,二是靠格局、眼光和坚持。 每天坚持进步一点点,不断的在一个项目上去精进,必定能有所成效,这不是鸡汤,是做事必须的态度。
|
存储 索引 Python
你还在为python中的列表、元组、字典发愁嘛,别愣着了,快来看!
你还在为python中的列表、元组、字典发愁嘛,别愣着了,快来看!
119 0
你还在为python中的列表、元组、字典发愁嘛,别愣着了,快来看!