iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >python列表和元组使用实例分析
  • 504
分享到

python列表和元组使用实例分析

2023-06-29 10:06:33 504人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

这篇文章主要讲解了“python列表和元组使用实例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python列表和元组使用实例分析”吧!前言在我们实际开发中,经常需要将一组数据存储起来,

这篇文章主要讲解了“python列表和元组使用实例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python列表和元组使用实例分析”吧!

python列表和元组使用实例分析

前言

在我们实际开发中,经常需要将一组数据存储起来,以便使用。如果学习了其他的语言可能知道数组(Array)这个数据结构,它就可以将多个数据进行存储,访问数据可以通过数组下标的方式,的进行获取。如果你是python开发者,那么可以使用更加灵活的列表(list)和元组(tuple),来进行数据储存。下面我们先简单了解下列表和元组的基本使用。

列表

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

初始化列表

a = list()b = []# 可以通过range快速创建listc = list(range(1,6))print("a:", a)print("b:", b)print("c:", c)# a: []# b: []# c: [1, 2, 3, 4, 5]

添加元素

append:在列表的末尾添加一个元素

>>l = []>>l.append("python")>>l['python']

extend:使用可迭代对象中的所有元素来扩展列表

>>l = ["python"]>>t = ["java"]>>l.extend(t)>>l['python', 'java']

insert:在给定的位置插入一个元素。第一个参数是要插入的元素的索引,所以 list_name.insert(0, x) 插入列表头部

>>l = ["python", "java"]>>l.insert(1,"Go")>>l['python', 'go', 'java']

删除元素

remove(x):从列表中删除值为x的第一项。 如果没有需要删除的值,那就抛出异常

>>l = ["python", "java"]>>l.remove("java")>>l['python']>>l.remove("test")Traceback (most recent call last):  File "<input>", line 1, in <module>ValueError: list.remove(x): x not in list

pop: 删除列表中给定位置的元素并返回它。如果没有给定位置,pop() 将会删除并返回列表中的最后一个元素

>>l = ["python", "java", "go"]>>l.pop()'go'>>l['python', 'java']>>l.pop(1)'java'>>l.pop(1)Traceback (most recent call last):  File "<input>", line 1, in <module>IndexError: pop index out of range

del: Python 中的关键字,专门用来执行删除操作,它不仅可以删除整个列表,还可以删除列表中的某些元素

>>l = ["python", "java", "go", "js"]>>del l[0:1]>>l['java', 'go', 'js']>>del l[0]>>l['go', 'js']

clear(): 移除列表中的所有元素。等价于 del a[:]

>>l = ["python", "java", "go", "js"]>>l.clear()>>l[]

ps: 这里注意和del 的区别, clear是清空, del list_name 是删除,内存也释放

修改元素

修改单个可以通过下标的方法

>>l = ["python", "go", "java"]>>l[0] = "PYTHON">>l['PYTHON', 'go', 'java']

修改一组数据可以通过切片的方式

>>l = ["python", "go", "java"]>>l[0:2] = "PYTHON", "GO">>l['PYTHON', 'GO', 'java']>>l[0:2] = ["python", "go"]>>l['python', 'go', 'java']

查询元素

index(x) :方法用来查找某个元素在列表中出现的位置(也就是索引),如果该元素不存在,则会导致 ValueError 错误

>>l['python', 'go', 'java']>>l.index("python")0>>l.index("python1")Traceback (most recent call last):  File "<input>", line 1, in <module>ValueError: 'python1' is not in list

count() :用来统计某个元素在列表中出现的次数

>>l['python', 'go', 'java']>>l.count("PYTHON")0>>l.count("python")1

其他操作

sort:对列表中的元素进行排序

>>l['go', 'java', 'python']>>l.sort(reverse=True)>>l['python', 'java', 'go']>>l.sort()>>l['go', 'java', 'python']

reverse: 反转元素

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

copy: 返回列表的一个浅拷贝,等价于 a[:]

>>l[5, 4, 3, 2, 1]>>a = l.copy()>>a[5, 4, 3, 2, 1]

python列表使用场景

1-使用列表实现栈

栈(stack)特点就是后进先出, 使用列表实现是非常容易的,要添加一个元素到堆栈的顶端,使用 append() 。要从堆栈顶部取出一个元素,使用 pop() ,不用指定索引。

stack = []stack.append(1)stack.append(2)stack.append(3)stack.append(4)stack.pop()# 4stack.pop()# 3stack.pop()# 2stack.pop()# 1# 注意捕捉错误

2-实现队列

from collections import dequequeue = deque(["python", "go", "java"])queue.append("python")queue.append("go")print(queue)queue.popleft()queue.popleft()print(queue)

返回结果

deque(['python', 'go', 'java', 'python', 'go'])deque(['java', 'python', 'go'])

列表推导式

a = [x ** 2 for x in range(10)]b = [(x, y) for x in [1, 2, 3] for y in [3, 1, 4] if x != y]# 嵌套列表推导式matrix = [    [1, 2, 3, 4],    [5, 6, 7, 8],    [9, 10, 11, 12],]c = [[row[i] for row in matrix] for i in range(4)]print("a:", a)print("b:", b)print("c:", c)

返回

a: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]b: [(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]c: [[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]

元组

元组是静态,大小固定,不可以对元素进行增加,修改或删除的操作

创建元组

a = 1, 2, 3print("a", a)b = (1, 2, 3)print("b", b)# 将字符串转换成元组tup1 = tuple("hello")print("将字符串转换成元组", tup1)# 将列表转换成元组list1 = ['Python', 'Java', 'c++', 'javascript']tup2 = tuple(list1)print("将列表转换成元组", tup2)# 将字典转换成元组dict1 = {'a': 100, 'b': 42, 'c': 9}tup3 = tuple(dict1)print("将字典转换成元组", tup3)# 将区间转换成元组range1 = range(1, 6)tup4 = tuple(range1)print("将区间转换成元组", tup4)

返回结果

a (1, 2, 3)b (1, 2, 3)将字符串转换成元组 ('h', 'e', 'l', 'l', 'o')将列表转换成元组 ('Python', 'Java', 'C++', 'JavaScript')将字典转换成元组 ('a', 'b', 'c')将区间转换成元组 (1, 2, 3, 4, 5)

访问元素

a = (1, 2, 3, 4, 5)# 通过下标print(a[0])# 通过切片:a[start : end : step]print(a[0:4:2])

返回结果

1(1, 3)

删除

a = (1, 2, 3, 4, 5)del a

元组和列表区别

元组是静态,列表是动态

元组修改

l = (1,2,3,4)id(l)# 4497372488l = l + (5,6)id(l)# 4494985832

列表修改

l = [1,2,3,4]id(l)# 4499169160l = l + [5,6]id(l)# 4495787016

通过上面可以发现元组是不可以改变的,这里强调一点很多新手对这个 l = l + (5,6) 很不难理解,不是说元组不可以修改的吗,那为什么这里可以修改?记住这里虽然可以执行,但是他是创建了一个新的元组,这时候的 l 不是原来的 l, 可以通过 id 查询(或则执行 l[0] = -1 就会报错)

在这里我多说几句,这里的静态和动态,大白话来讲是列表是可以进行列表的操作(新增,删除,修改),一般操作行为下他的内存地址不变(通过id查看),这和他的实现有关,但是元组就会改变,所以新的元组和原来的不一样,一般时候有人(面试官或则开发不小心)会问你 a = ([1,2], 3,4),  为什么可以进行a[0].append(3),但是id(a)前后不变,这就是0下标的元素是列表,列表可以修改的。

列表需要更多内存,元组需要更少内存

list_t = []print("列表初始化时候大小:", list_t.__sizeof__())tuple_t = ()print("元组初始化时候大小:", tuple_t.__sizeof__())

返回结果

列表初始化时候大小: 40元组初始化时候大小: 24

看到结果有没有发现列表比元组大18字节,那么问题来了:这18字节是怎么来的?这是由于列表是动态的,它需要存储指针来指向对应的元素(占用 8 个字节)。另外,由于列表中元素可变,所以需要额外存储已经分配的长度大小(占用 8 个字节),这样才能实时追踪列表空间的使用情况。但是对于元组,情况就不同了,元组长度大小固定,且存储元素不可变,所以存储空间也是固定的。

列表不可被hash,元组可以被hash

tuple_t = (1, 2)print("元组hash值:", hash(tuple_t))list_t = [1, 2]print("列表hash值:", hash(list_t))

执行结果

Traceback (most recent call last):  File "/Users/linjian/MonitorCenter/MonitorCenter/apps/t6.py", line 4, in <module>    print("列表hash值:", hash(list_t))TypeError: unhashable type: 'list'元组hash值: 3713081631934410656

从上面的结果可以发现元组是可以被hash,但列表却是不可以。如果基础扎实的应该会反应过来,python中hash需要满足是不可变类型的数据结构(字符串str、元组tuple、对象集objects)

执行效率

#   初始化一个相同元素的列表和元组使用情况(DjangoDemo) MonitorCenter % python -m timeit 'x=(1,2,3,4,5,6)'100000000 loops, best of 3: 0.0103 usec per loop(djangoDemo)  MonitorCenter % python -m timeit 'x=[1,2,3,4,5,6]'10000000 loops, best of 3: 0.0514 usec per loop#  元组和列表索引操作对比(djangoDemo) MonitorCenter % python -m timeit 'x=(1,2,3,4,5,6)' 'y=x[3]'10000000 loops, best of 3: 0.0267 usec per loop(djangoDemo) MonitorCenter % python -m timeit 'x=(1,2,3,4,5,6)' 'y=x[3]'10000000 loops, best of 3: 0.0265 usec per loop

上面的运行结果显示: 元组初始化远快于列表  ,大概有五倍的差距,但是索引操作的时候速度没有多大差距

截止目前为止,我们可以简单总结列表和元组的区别有如下:

  1. 元组使用tuple()或()初始化,列表使用list()或[]初始化

  2. 元组是静态,而列表是动态

  3. 列表需要更多内存,元组需要更少内存

  4. 列表不可被hash,元组可以被hash

  5. 元组初始化效率高于列表,但索引操作没有多大差距

元组和列表使用场景

再说使用场景前先讲一下,在python后台,对静态数据做一些资源缓存,通常因为垃圾回收机制的存在,一些变量不使用,python就会回收他们所占的内存,但是对于一些静态变量(比如说元组),当他们占用不大时候(长度1~20的元组),python会暂时缓存这部分内存,这样下次就可以不再向操作系统发出请求,分配内存资源,而是直接使用用缓存中之前的内存空间,这样大大加快了程序的运行速度。所以一般有时候数据量不大,我经常使用元组替代列表。到目前为止我们可以简单的总结出场景可以如下所示:

  1. 如果数据不可变,我们就可以考虑使用元组,比如说性别类型,返回出去的城市信息等等

  2. 如果数据可变,我们就考虑使用列表,比如说用户当天访问的网页等等

拓展知识

创建空的列表,是使用list()效率好还是[]?

(djangoDemo) MonitorCenter % python -m timeit 'x=list()'                10000000 loops, best of 3: 0.087 usec per loop(djangoDemo) MonitorCenter % python -m timeit 'x=[]'    100000000 loops, best of 3: 0.0177 usec per loop

通过上面的测试可以知道是[]快。list()函数调用,python中函数调用会创建stack并且会进行参数检查,[]是一个内置C函数,可以直接调用,因此效率更高。

执行相乘操作时候,是 *= 效率好, 还是*?

(djangoDemo) MonitorCenter % python -m timeit 'x = [1,2,3]' 'x*=3'10000000 loops, best of 3: 0.0903 usec per loop(djangoDemo) MonitorCenter % python -m timeit 'x = [1,2,3]' 'x = x * 3'10000000 loops, best of 3: 0.104 usec per loop

从结果可以看出是*效率会低点。*= 中会预分配,不足的时候扩容,但是* 会按照每次的量进行分配大小

为什么输出是这样的?

list_1 = [1, 2, 3, 4]list_2 = [1, 2, 3, 4]list_3 = [1, 2, 3, 4]list_4 = [1, 2, 3, 4]for idx, item in enumerate(list_1):    del itemfor idx, item in enumerate(list_2):    list_2.remove(item)for idx, item in enumerate(list_3[:]):    list_3.remove(item)for idx, item in enumerate(list_4):    list_4.pop(idx)print("list_1", list_1)print("list_2", list_2)print("list_3", list_3)print("list_4", list_4)

结果

list_1 [1, 2, 3, 4]list_2 [2, 4]list_3 []list_4 [2, 4]

list_2为什么输出是[2,4]? 因为在第一次删除后,list_2变成了 [2,3,4], 然后在删除轮循到到第二个数据也就是3(大部分都以为是2,但是2从原来的下表2变为1),可以参看下面的

give next element: 00 ---> 11      22      33      4give next element: 10      21 ---> 32      4give next element: 20      21      4

list_3 为什么是[], 还记得之前我们说copy时候,copy等于[:](浅拷贝),所以轮询的和删除的不是同一内存的数据。

list_4可以结合list_2思考,因为第一次删除,第二次删除是下标2,但是数据变了,下标2的数据不是原来的2,而是3

感谢各位的阅读,以上就是“python列表和元组使用实例分析”的内容了,经过本文的学习后,相信大家对python列表和元组使用实例分析这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: python列表和元组使用实例分析

本文链接: https://www.lsjlt.com/news/324380.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • python列表和元组使用实例分析
    这篇文章主要讲解了“python列表和元组使用实例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“python列表和元组使用实例分析”吧!前言在我们实际开发中,经常需要将一组数据存储起来,...
    99+
    2023-06-29
  • Python列表、字典、元组和集合实例分析
    这篇文章主要介绍了Python列表、字典、元组和集合实例分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Python列表、字典、元组和集合实例分析文章都会有所收获,下面我们一起来看看吧。列表1.列表什么是列表...
    99+
    2023-06-30
  • Python列表和元组如何使用
    这篇文章主要介绍“Python列表和元组如何使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Python列表和元组如何使用”文章能帮助大家解决问题。列表学习要点先看一遍列表定义:列表是可变序列,也...
    99+
    2023-07-04
  • Python元组实例分析
    本篇内容主要讲解“Python元组实例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python元组实例分析”吧!引言——在Python中,通过数据结构来保存项目中重要的数据信息。Pytho...
    99+
    2023-06-29
  • HTML列表使用实例分析
    今天小编给大家分享一下HTML列表使用实例分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧...
    99+
    2024-04-02
  • 列表和元组(上)——“Python”
    各位CSDN的uu们你们好呀,今天小雅兰的内容是Python中的列表,下面,让我们进入列表的世界吧 列表是什么, 元组是什么 创建列表 访问下标 切片操作 遍历列表元素 列表是什么, 元组是什么 编程中, 经常需要使用变量, 来保...
    99+
    2023-09-02
    python 开发语言 数据结构 算法 线性回归
  • Python元素集合的列表切片实例分析
    今天小编给大家分享一下Python元素集合的列表切片实例分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、列表切片(Sl...
    99+
    2023-06-29
  • python元组和列表的作用
    这篇文章主要介绍“python元组和列表的作用”,在日常操作中,相信很多人在python元组和列表的作用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”python元组和列表的作用”的疑惑有所帮助!接下来,请跟...
    99+
    2023-06-02
  • 如何分析Python中的列表、元组和条件判断
    如何分析Python中的列表、元组和条件判断,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。1.列表:list# 1.list:Python内置的一种数...
    99+
    2023-06-28
  • EasyUI表单元素使用实例分析
    这篇文章主要介绍了EasyUI表单元素使用实例分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇EasyUI表单元素使用实例分析文章都会有所收获,下面我们一起来看看吧。1.easyui-textbox 文本框定...
    99+
    2023-06-27
  • Python使用list列表和tuple元组的方法
    list: Python内置的一种数据类型是列表:list。list是一种有序的集合,可以随时添加和删除其中的元素。 比如,列出寝室所有室友的名字,就可以用一个list表示: roo...
    99+
    2024-04-02
  • python列表案例分析
    本篇内容主要讲解“python列表案例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“python列表案例分析”吧!下面要学的是列表:任务1、“千年虫”我来了函数enumerateenumer...
    99+
    2023-06-29
  • python如何实现列表组合和列表元素替代组合
    小编给大家分享一下python如何实现列表组合和列表元素替代组合,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!列表组合和列表元素替代组合>>> for ...
    99+
    2024-04-02
  • Python基础:列表(list)和元组
      学一门语言,可以用对比其他语言方法加深对这门语言特点的理解。 一、定义:列表和元组,都是一个可以放置任意数据类型的有序集合。   mutable的列表:动态的,可以改变元素   immutable的元组:静态的,不可以改变元素 二、支...
    99+
    2023-01-31
    基础 列表 Python
  • Python列表和元组的使用方法是什么
    今天小编给大家分享一下Python列表和元组的使用方法是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。列表学习要点先看一...
    99+
    2023-07-04
  • Python学习之列表和元组的使用详解
    目录列表和元组简介列表学习要点列表的声明语法列表的读取列表操作列表元素的修改和删除列表元素合并列表元素顺序变化元组学习要点元组基本知识元组的基本操作列表和元组简介 如果说在 Pyth...
    99+
    2024-04-02
  • python列表和元组(第二章)
    1)列表和元组 python包涵6中内建的序列(列表,元组,字符串,Unicode字符串,buffer对象和xrange对象),本章讲常用的2中类型:列表和元组。 列表和元组的区别:列表可以修改,元组则不能。     2)索引 >&...
    99+
    2023-01-31
    第二章 列表 python
  • Python的列表和元组详情
    目录一、Python 列表(list)1.序列介绍2.列表的概述列表是包含0个或者多个元素的有序序列,属于序列类型。3.创建列表4.列表的索引5.列表的分片6.列表的分片赋值7.循环...
    99+
    2024-04-02
  • Python之列表append()方法使用实例代码分析
    这篇文章主要介绍“Python之列表append()方法使用实例代码分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Python之列表append()方法使用实例代码分析”文章能帮助大家解决问题。...
    99+
    2023-07-04
  • python列表和元组互换怎么实现
    要实现Python中列表和元组的互换,可以通过以下方法: 将列表转换为元组:使用tuple()函数将列表转换为元组。 my_li...
    99+
    2023-10-24
    python
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作