百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT知识 > 正文

python序列之列表详解

liuian 2025-03-06 16:49 18 浏览

Python中除了字符串外,还有另外两种序列:列表和元组,他们都可以包含零个或多个元素,而且并不要求所含元素的类型相同,每个元素都可以是任何Python类型对象。

为什么Python要同时设计列表和元组这两种序列结构呢?这是因为元组和字符串类似是不可变的,当你给元组赋值时,这些值便会被固定在元组中而无法修改。而列表是灵活可变的,可以随意插入或者删除其中的元素,结构更灵活,用处也更强大。

一:列表创建

使用[ ]或者list[ ]创建列表

number=[1,2,3]
s=['lily','jude']
mix=[1,'hello',[1,2,3],3.14]      #混合列表
empty=[]                                #也可以创建一个空的列表
> list('jude')                            # 使用list函数创建
['j','u','d','e'] 

二:列表操作

2.1,通过索引获取元素,索引值从0开始

name=['lucy','lily',['china','usa'],'007','anna','mei']
name[0] >>> 'lucy'
name[1] >>> 'lily'
name[-1] >>> 'mei'  #获取最后一个元素,依次类推
name[2][1] >>>'usa'   #针对嵌套的列表结构,可多次通过索引获取

2.2,列表分片获取

当需要从列表一次性取出多个元素时,需要通过列表分片的方式来实现,

其基本形式是:列表名[左索引值:右索引值],左右索引值都可以省略,

左索引值省略时表明,列表元素从0开始,右索引值省略表示包含左索引值右边的所有元素。

注意:分片其实是创建原列表的一个拷贝

member = ['php','python','java','sql']        
member[1:3] >>>['python','java']            #member本身元素并没有发生变化,相当于生成了包含元素1和2的新列表
member[:3] >>>['php','python','java']     #表示从第0个索引值开始
member[1:] >>>['python','java','sql']       #表示从左索引值开始到列表右边所有元素
member[:] >>>['php','python','java','sql']      #相当于复制了一份原列表

分片操作可以接收第三个参数,也就是步长,格式如下:[start:end:step],

step在不指定时默认为1

numb=[1,2,3,4,5,6]
numb[0:6:2] >>>[1,3,5]
numb[::2] >>>[1,3,5]
numb[::-1] >>>[6,5,4,3,2,1]       #相当于复制一个反转的列表

2.3,列表复制

三种方法都可以将一个列表的值复制到一个新的列表

  • copy()函数 用于拷贝一个列表
  • list()函数转换
  • 列表分片[ : ]
list1 = [123,456]
list2 = list1.copy()  
#则list2的值也变为[123,456] 它的功能和列表分片功能 list2 = list1[:]作用是一样的;
#他们两个与赋值运算符=是有区别的,前者是在内存中重新申请一个空间并存放列表的值,
=则是将列表的地址直接赋值给了另一个列表,
举例说明两者带来的区别:
list1 = [1,3,5]
list2 =list1
list3 = list1.copy()
list1.append('python')
list2 >> [1,3,5,'python']
list3 >> [1,3,5]

2.4,列表排序


经常需要将列表按元素值进行排序,python提供了两个函数

  • list.sort(reverse=False) :直接改变原列表结构,默认升序排列,
  • sorted(list) :返回排序后的结果,相当于复制了一个列表,原列表不变

如果列表中元素都是数字,会默认安装从大小大的升序排列,如果元素都是字符串,则会按照字母表顺序排列。

进阶用法:

sort(func,key,reverse) func和key分别设置排序的算法和关键字,

reverse=False表示正序排列,为True颠倒顺序,默认正序

a=[1,5,3,99,6]
a.sort()  
a >> [1,3,5,6,99]
sorted(a)           #内置函数sorted,返回排序后的结果,相当于复制了一个列表,原列表不变
>> [1,3,5,6,99]

2.5,添加元素

  • append(str):添加元素至列表尾部
  • extend([]):将一个列表合并到另一个列表中,等价于 +=
  • insert(index,str):在指定位置插入元素
>>> number=['lucy','lily']
#append函数将元素添加到列表末尾
>>> number.append('007') 
    ['lucy','lily','007'] 
#extend函数将列表添加到列表的末尾
>>> number.extend(['anna','mei']) #等价于 number+=['anna','mei']  
    ['lucy','lily','007','anna','mei']
#insert()方法
>>> number.insert(0,'ken')
    ['ken','lucy','lily','007','anna','mei']
**连接操作符,两个列表直接相加可以得到合并之后的新列表
a,b=[1,2],[3,4]
>>> a+b
    [1,2,3,4]
>>> a*2 
    [1,2,1,2]

2.6 删除列表元素

  • remove(str):删除指定值的元素
  • del(index) : 删除指定位置的元素
  • pop(num=-1) :删除指定位置的元素(默认删除最后一个元素),该函数返回删除的元素
  • clear() :用于删除列表中的所有元素,变成一个空的列表
name=['lucy','lily','007','anna','mei']
>>> name.remove('lucy')
    ['lily','007','anna','mei']

>>> del name[1]
    ['lily','anna','mei']

>>> name.pop() 
'mei'
>>> name
['lily','anna']
>>> name.pop(1)
    'anna'
>>> name
['lily']

list1 = [1,1,2,3,4]
>>> list1.clear() 
>>> list1
    []

2.7,使用in判断值是否存在

判断列表中是否存在该元素,存在返回True

name=['lucy','lily','007','anna','mei']
>>> '007' in name
True

2.8,使用join()转换为字符串

注意:join()其实是字符串方法,不是列表的方法,不能通过suit.join()进行调用。

join() 是字符串分割split()的逆过程

suit=['apply','orange','peer']
>>> '# '.join(suit)
'apply# orange# peer'

2.9,元素计数

使用count()可以计算某一个特定元素在列表中出现的次数

#count计算参数在列表中出现的次数
list1.count(1) >>> 2 

2.10,获取列表长度及列表反转

  • len():返回列表的长度
  • reverse():没有返回值,对原列表的进行反转而不是复制一个
list1=[1,2,3,1,4]
#计算元素个数
>>> len(list1) 
5 
#列表反转
>>> list1.reverse() 

>>> list1
[4, 1, 3, 2, 1]

相关推荐

教你把多个视频合并成一个视频的方法

一.情况介绍当你有一个m3u8文件和一个目录,目录中有连续的视频片段,这些片段可以连成一段完整的视频。m3u8文件打开后像这样:m3u8文件,可以理解为播放列表,里面是播放视频片段的顺序。视频片段像这...

零代码编程:用kimichat合并一个文件夹下的多个文件

一个文件夹里面有很多个srt字幕文件,如何借助kimichat来自动批量合并呢?在kimichat对话框中输入提示词:你是一个Python编程专家,完成如下的编程任务:这个文件夹:D:\downloa...

Java APT_java APT 生成代码

JavaAPT(AnnotationProcessingTool)是一种在Java编译阶段处理注解的工具。APT会在编译阶段扫描源代码中的注解,并根据这些注解生成代码、资源文件或其他输出,...

Unit Runtime:一键运行 AI 生成的代码,或许将成为你的复制 + 粘贴神器

在我们构建了UnitMesh架构之后,以及对应的demo之后,便着手于实现UnitMesh架构。于是,我们就继续开始UnitRuntime,以用于直接运行AI生成的代码。PS:...

挣脱臃肿的枷锁:为什么说Vert.x是Java开发者手中的一柄利剑?

如果你是一名Java开发者,那么你的职业生涯几乎无法避开Spring。它如同一位德高望重的老国王,统治着企业级应用开发的大片疆土。SpringBoot的约定大于配置、SpringCloud的微服务...

五年后,谷歌还在全力以赴发展 Kotlin

作者|FredericLardinois译者|Sambodhi策划|Tina自2017年谷歌I/O全球开发者大会上,谷歌首次宣布将Kotlin(JetBrains开发的Ja...

kotlin和java开发哪个好,优缺点对比

Kotlin和Java都是常见的编程语言,它们有各自的优缺点。Kotlin的优点:简洁:Kotlin程序相对于Java程序更简洁,可以减少代码量。安全:Kotlin在类型系统和空值安全...

移动端架构模式全景解析:从MVC到MVVM,如何选择最佳设计方案?

掌握不同架构模式的精髓,是构建可维护、可测试且高效移动应用的关键。在移动应用开发中,选择合适的软件架构模式对项目的可维护性、可测试性和团队协作效率至关重要。随着应用复杂度的增加,一个良好的架构能够帮助...

颜值非常高的XShell替代工具Termora,不一样的使用体验!

Termora是一款面向开发者和运维人员的跨平台SSH终端与文件管理工具,支持Windows、macOS及Linux系统,通过一体化界面简化远程服务器管理流程。其核心定位是解决多平台环境下远程连接、文...

预处理的底层原理和预处理编译运行异常的解决方案

若文章对您有帮助,欢迎关注程序员小迷。助您在编程路上越走越好![Mac-10.7.1LionIntel-based]Q:预处理到底干了什么事情?A:预处理,顾名思义,预先做的处理。源代码中...

为“架构”再建个模:如何用代码描述软件架构?

在架构治理平台ArchGuard中,为了实现对架构的治理,我们需要代码+模型描述所要处理的内容和数据。所以,在ArchGuard中,我们有了代码的模型、依赖的模型、变更的模型等,剩下的两个...

深度解析:Google Gemma 3n —— 移动优先的轻量多模态大模型

2025年6月,Google正式发布了Gemma3n,这是一款能够在2GB内存环境下运行的轻量级多模态大模型。它延续了Gemma家族的开源基因,同时在架构设计上大幅优化,目标是让...

比分网开发技术栈与功能详解_比分网有哪些

一、核心功能模块一个基本的比分网通常包含以下模块:首页/总览实时比分看板:滚动展示所有正在进行的比赛,包含比分、比赛时间、红黄牌等关键信息。热门赛事/焦点战:突出显示重要的、关注度高的比赛。赛事导航...

设计模式之-生成器_一键生成设计

一、【概念定义】——“分步构建复杂对象,隐藏创建细节”生成器模式(BuilderPattern):一种“分步构建型”创建型设计模式,它将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建...

构建第一个 Kotlin Android 应用_kotlin简介

第一步:安装AndroidStudio(推荐IDE)AndroidStudio是官方推荐的Android开发集成开发环境(IDE),内置对Kotlin的完整支持。1.下载And...