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

Python数据类型—列表

bigegpt 2025-01-03 14:21 4 浏览

序列是python中最基本的数据,python中有六个序列的内置类型,但最常见的是列表和元组。序列中的每个元素都分配一个位置,用数字表示,即是该元素的索引值,第一位元素的索引值是0,第二位是1,以此类推。

列表(list)

列表是一个数据的集合,用方括号【】表示,里面的数据之间用逗号隔开,集合内可以放任何数据类型,可对集合进行增删改查操作。

>>> list_a=['红色','蓝色','绿色','紫色',500]#list是内置函数,不能直接用来做变量名,可以适当的做一下调整。

列表的索引取值

索引:列表中每个元素在列表中的位置称为索引(index),可以通过索引值来取对应位置上的值。索引值从左往右是从0开始,以此类推。负索引是从列表尾部开始往前数,从-1开始。索引值超过其列表长度就会报错。

>>> list_a=['红色','蓝色','绿色','紫色',500]
>>> list_a[0]#取索引为0的列表元素
'红色'
>>> list_a[1]#取索引为1的列表元素
'蓝色'
>>> list_a[-1]#取索引为-1的列表元素,即列表中最后一位元素
500
>>> list_a[4]#取列表的第四位元素
500
>>> list_a[5]#因为没有第五位,超出了取值范围,就会报错
Traceback (most recent call last):
  File "<pyshell#7>", line 1, in <module>
    list_a[5]
IndexError: list index out of range

列表的切片

切片:列表切片是处理列表的部分元素,也就是把整个列表切开,列表可以根据一个范围来取值。切片是两个范围之间取值,且后面的数取不到,即切片的区间为左闭右开。切片时范围超过列表长度也没关系。切片时还可以指定步长(step),步长不能为0,默认为1。(闭区间是指端点包含在内,开区间是指端点不包含在内)

ps:定义的列表里面的数据是用逗号隔开,列表切片表达式中间是用冒号隔开,完整的列表切片表达式含有两个冒号(以下案例第九个)。

>>> list_a[0:3]#取前三位。
['红色', '蓝色', '绿色']
>>> list_a[0:100]#索引值超出范围会取出列表的全部数据
['红色', '蓝色', '绿色', '紫色', 500]
>>> list_a[0:500]#同理,500是索引值,不是数据
['红色', '蓝色', '绿色', '紫色', 500]
>>> list_a[0:4]#左闭右开
['红色', '蓝色', '绿色', '紫色']
>>> list_a[0:4:2]#步长为2,两个数据取第一个,依次类推
['红色', '绿色']
>>> list_a[4:1:-1]#步长为负数,实际效果就是将序列进行反转
[500, '紫色', '绿色']

下面的方法演示会以上面定义好的列表为基础

列表的增删改查(增加删除修改查找)这些方法的调用格式:要操作的列表.方法名

1. 添加:append,extend,insert这三个方法

list.append:在列表末尾单个添加新的对象。

list.extend:批量添加,也即向列表追加另一个列表。

list.insert:将某个元素插放到列表的指定定位置。

>>> list_a.append('黑色')#单个添加
>>> list_a
['红色', '蓝色', '绿色', '紫色', 500, '黑色']
>>> list_a.extend(['橙色','灰色'])#批量添加,注意括号的区别
>>> list_a
['红色', '蓝色', '绿色', '紫色', 500, '黑色', '橙色', '灰色']
>>> list_a.insert(1,'银色')#指定索引为1的位置添加,参数1为索引,参数2为要添加的内容
>>> list_a
['红色', '银色', '蓝色', '绿色', '紫色', 500, '黑色', '橙色', '灰色']

2. 删除:pop,remove,clear这三个方法

.pop:移除列表中的一个元素,一次移除一个(默认移除列表中最后一个元素),并且返回该元素的值。

list.remove:移除列表中指定位置的元素

list.clear:一次性清空列表中所有的元素

>>> list_a#列表
['红色', '银色', '蓝色', '绿色', '紫色', 500, '黑色', '橙色', '灰色']
>>> list_a.pop()#默认移除最后一位,返回该元素的值
'灰色'
>>> list_a.pop(1)#移除指定位置(索引)元素,返回该元素的值。参数为索引
'银色'
>>> list_a.remove('蓝色')#移除指定元素,不返回值
>>> list_a#最终结果
['红色', '绿色', '紫色', 500, '黑色', '橙色']
>>> list_a.clear()#一次性清空列表,没有参数
>>> list_a
[]#空列表

注意:删除是不可逆的,删除前要考虑好哦

3. 替换:利用索引取值,可以直接替换。

>>> list_b=['鸡','鱼','羊','牛']#定义列表
>>> list_b[0]='虾'#利用索引取值,可以直接替换
>>> list_b
['虾', '鱼', '羊', '牛']

4.查找:index方法(可以根据元素,找到元素的索引值)

>>> list_a.index(500)#查找列表元素为500的索引值
4

列表脚本操作符

列表对+和*的操作符与字符串相似,+用于组合列表,*用于重复列。

>>> list_a=[1,2,3,]#定义列表
>>> list_b=[4,5,6]
>>> list_a+list_b#组合列表
[1, 2, 3, 4, 5, 6]
>>> list_a*3#重复列表
[1, 2, 3, 1, 2, 3, 1, 2, 3]

如果是直接两个列表相加,记得重新赋值,否则不会改变原值。

>>> list_c=list_a+list_b
>>> list_c
[1, 2, 3, 4, 5, 6]

列表的其他方法

count:可以统计列表里面某个元素出现的次数,也属于查找。

sort:对列表中元素进行从小到大排序,采用timsort算法排序。

以下的方法自己试一下,因为后面我都做了详细的作用讲解,不再一一赘述。

>>> list_a=[3,4,5,6,7,8]#定义列表
>>> list_b=list_a.copy()#将复制的列表赋值给list_b
>>> list_b
[3, 4, 5, 6, 7, 8]
>>> list_a.reverse()#反向列表,不用重新赋值,会在原有的列表上进行
>>> list_a
[8, 7, 6, 5, 4, 3]
>>> list_a.count(3)#统计该元素的个数
1
>>> list_a.sort()#从小到大排序,也不用重新赋值。
>>> list_a
[3, 4, 5, 6, 7, 8]


相关推荐

ActiveAndroid使用(对象化数据库)

配置模块的build.gradlerepositories{mavenCentral()mavenLocal()maven{url"https://oss.sonatype.org/conte...

AndroidStudio下的依赖管理(android app依赖外部jar包)

在开发中用第三方库是很常见的事,如何在AndroidStudio下管理这些依赖呢?这就是这篇文章的目的。目录Maven/Ivy仓库依赖Module依赖aar文件依赖jar文件依赖例子完整代码一、Mav...

Android Studio之gradle的配置与介绍

1、gradle的简单介绍Gradle是可以用于Android开发的新一代的BuildSystem,也是AndroidStudio默认的build工具。其实Gradle脚本是基于一种JVM语言—...

Android中的run-as命令带来的安全问题

一、前言最近一周比较忙,没时间写东西了,今天继续开始我们今天的话题:run-as命令,在上周的开发中,遇到一个问题,就是在使用run-as命令的时候出现了一个错误,不过当时因为工作进度的问题,这问题就...

Android系统级深入开发——input驱动程序

1、Input驱动程序是Linux输入设备的驱动程序,分成游戏杆(joystick)、鼠标(mouse和mice)和事件设备(Eventqueue)3种驱动程序。其中事件驱动程序是目前通用的驱动程序...

Android项目中如何用好构建神器Gradle?

CSDN移动将持续为您优选移动开发的精华内容,共同探讨移动开发的技术热点话题,涵盖移动应用、开发工具、移动游戏及引擎、智能硬件、物联网等方方面面。如果您想投稿、参与内容翻译工作,或寻求近匠报道,请发送...

Android Studio自定义文件类头(android studio自定义标题栏)

--简书作者谢恩铭转载请注明出处今天给大家介绍一个很简单的"小"技巧。平时,我们在AndroidStudio中开发Android时,总免不了要创建新的文件,也许是Java文件,也许是C...

C语言#include头文件真的是插入代码吗?

若文章对您有帮助,欢迎关注程序员小迷。助您在编程路上越走越好!编译器理论和实作既是又不是。从编译器理论理解,#include头文件"相当于"插入了头文件的代码,以供源代码引用(宏定...

Android 系统核心机制binder(03)binder C++层实现

本章关键点总结&说明:这里主要关注BinderC++部分即可,看到,也是本章节的核心内容,主要就是以C++封装的框架为主来解读binder。之前主要针对于底层驱动binder的数据交互以及...

Java对象序列化与反序列化的那些事

Java对象序列化与反序列化的那些事在Java的世界里,对象序列化和反序列化就像一对孪生兄弟,它们共同构成了Java对象存储和传输的基础。如果你曾经尝试将对象保存到文件中,或者在网络中传输对象,那么你...

Java对象序列化剖析(java 对象序列化)

对象序列化的目的1)希望将Java对象持久化在文件中2)将Java对象用于网络传输实现方式如果希望一个类的对象可以被序列化/反序列化,那该类必须实现java.io.Serializable接口或jav...

C++模板 - 16(SFINAE)(c++模板编程)

C++支持函数重载,同一个函数名,只要它的签名不一样,可以声明若干个版本(这个特性也是必须的,不然构造函数就只能有一个了)。现在函数的重载集合中又加入了新的成员-函数模板,事情就变得越发有趣起来,...

NewtoSoft.Json相关使用技巧(newtosoft.json相关使用技巧有哪些)

  本篇将为大家介绍Newtonsoft.Json的一些高级用法,可以修改很少的代码解决上述问题。Newtonsoft.Json介绍  在做开发的时候,很多数据交换都是以json格式传输的。而使用Js...

C#调用DeepSeek API(c#调用deepseek api 流式输出)

一、官方网站二、DeepSeek测试DeepSeek三大适用模式:基础模型(V3)、深度思考(R1)、联网搜索。基础模型(V3)深度思考(R1)联网搜索三、C#调用DeepSeekAPI核心代码//...

.NET性能系列文章二:Newtonsoft.Json vs System.Text.Json

微软终于追上了?图片来自GlennCarstens-Peters[1]Unsplash[2]欢迎来到.NET性能系列的另一章。这个系列的特点是对.NET世界中许多不同的主题进行研究、基准和比较...