一文彻底搞懂Python列表(list)操作的方法(重走Python之路)

 更新时间:2026年09月10日 10:32:19   作者:hash怪  
这篇文章主要介绍了Python列表(list)操作方法的相关资料,包括索引、切片、相加、相乘和成员资格检查,并重点讲解了列表这一序列数据结构的操作与方法,如赋值、删除、列表方法,需要的朋友可以参考下

写在前面

任何一个算法,都是由逻辑和数据结构组成的。现在流行与世的编程语言有很多,比如Java、Python、C、C++等等,使用不同的编程语言可以实现一个相同的算法,除了一般的编程语言本身的语法规则有差异之外,主要的差异就在于编程语言支持的数据结构,因为逻辑都是一样的。一个好的数据结构,将使得编程过程、算法运行效率都更加的巴适!!!

Python语言是大家公认的最容易上手的语言,其背后的一个最重要的原因就是Python值支持的数据结构非常的灵活和完备,这篇文章要介绍的就是最为常用的一个序列数据结构:列表。

首先,对列表进行了解之前,我们需要对其Python支持的最为常用的数据结构进行梳理,如下图:

 Python支持的一种数据机构的基本概念,我们称之为“容器”,也就是可以包含其他对象的对象,主要分为序列和映射,序列分为列表、元组及字符串等,他们都可以使用index来访问,而字典则是通过key来访问value的,也就是映射的涵义,当然我们也可以把序列看出key是0,1,2……的字典。当然,Python还有一种常见的数据结构,我们称之为集合(set),这里暂时按下不表。

通用的序列操作

我们既然把列表、元组、字符串都归为序列类型,那么说明其必然有相同之处,事实也确实如此。有几种操作适合于所有的序列,主要包括索引、切片、相加、相乘和成员资格检查。

(1)索引

a_list = [1,2,3,"world","it",[4,5,6]]

# a_list[0]
# 1

# a_list[-1]
# [4,5,6]

 序列中的所有元素都有编号,从左到右,从0开始递增;从右到左,从-1开始递减 ,这一点需要牢记。上面的例子说明了,列表的内容可以是不同的类型,包括更加复杂的对象,这与Java等编程语言中的一维数组等具有很大的区别,更加凸显Python的灵活性。

当然,还有很多新奇的操作,比如下面这样。当你见到它时,请不要感到陌生。

# 直接对一个字符串字面量进行索引操作,其他序列一样
"hello world"[1]
[12,34,34,45][2:]

# 如果一个函数调用返回的是一个序列,也可以直接对其进行索引操作
f = input("input your answer:")[1]

(2)切片

如上面例子中的 [12,34,34,45][2:],你或许会问后面的[2:] 是什么意思?这就是切片(slicing)了。使用切片用来访问特定范围内的元素,也就是数学上区间的概念,它是由两个索引和冒号构成的。听起来是不是很简单,但是,切片并不是很容易被我们掌握的。需要注意以下几点。

【1】两个索引实际上是左闭右开的区间结构,也就是说,第一个索引是包含第一个元素的编号,而第二个索引是切片后余下的第一个元素的编号。

 ok,你以为你全部掌握了吗?别忘记了,我们还有负值索引,这可真的是个麻烦事。

【2】负值索引的奇怪之处

# 注意,这里的numbers就是上文图中的[1,2,3,……,10]
>>> numbers[7:10]
[8,9,10]

# 使用负值索引居然取不到最后一个元素
>>> numbers[-3:-1]
[8,9]

# 直接取不到任何元素,而返回一个空的列表
>>> numbers[-3:0]
[]

# 这样是对的
>>> numbers[-3:]
[8,9,10]

 这并不值得我们惊慌,紧紧把握住一点,那就是切片是左闭右开的,那么[-3:-1],实际上取不到-1,而在序列的索引空间中,-1的后面不是0,-1是最后一个元素,而0是第一个元素,是不是很有趣。如何解决呢?这里有了省略的写法,它表示的是某一个位置直到序列的最后,由此,我们可以使用numbers[:],表示对整个序列的复制。

【3】步长的概念

实际上的切片都是包括三个参数的,开始index、结束index和步长,默认步长是1,也就是顺序去取值。而步长就是描述跳过几个元素而去取值的配置参数。比如:

numbers[0:10:2]
# [1,3,5,7,9]
numbers[3:6:3]
# [4]

 步长也可以是负数,怎么样?搭配起来是不是很刺激呢。

 总结来说,切片是一个颇费思量的方法,一般我们也不会去使用步长的特别设置,实在需要了,你就写个dev版本测试一下嘛,试一试总是保险的。

(3)序列相加

序列是可以拼接的,也就是相加的概念。

 这没有什么需要强调的,但是一般而言,不同类型的序列之间不可以直接使用加号进行拼接。

(4)序列相乘

当序列与一个数X相乘时,就是对这个序列进行X次的重复。

 这里也没有啥需要强调的,给大家看一个例子:

 这个小文本框你真的以为是别人手动打出来的吗?哈哈哈,使用我们这里的知识你就可以程序生成哦。

(5)成员资格检查

也就是使用“in”判断特定的值是不是在这个序列里面,他的返回值是一个布尔类型的,这在判断等表达式中使用十分广泛。

 当然了,还可以对序列进行长度、最大值、最小值的计算,主要是len()、max()、min()等的使用,这里不再赘述。

Python的主力干将:列表的操作与方法

(1)函数list

list("hello")
# ["h","e","l","l","o"]

 将字符串转换为列表,哪又如何把字符列表转换为字符串呢?下面就是其逆操作。

"".join(somelist)

(2)基本的列表操作

【1】赋值操作

我们可以通过索引或者切片的方法给一个列表修改值。你不可以对一个字符串和元组进行按索引的赋值操作,这是非法的。

【2】删除元素

删除一个列表的元素有很多种方法,包括del、remove、pop三种。

① del语句

②remove方法:删除第一个指定的值得元素,对原列表进行修改,且不会有返回值。如果没有就会报错!!!

 ③pop方法:不传递参数时候是pop末尾元素,也可以指定index而pop指定位置参数,有返回值,对原来的列表进行修改。

 *说明:方法都是 object.method( ),使用的是点操作符,这是方法的引用方法。

【3】给切片赋值

 切片赋值就是一种赋值操作,不过,使用切片可实现一些很有趣的功能,如上面所示。

(3)列表方法

【1】append用以将一个对象附加到列表末尾

【2】clear就地清空列表的内容

【3】列表的复制

b与a的赋值,其本质是一种对象地址的引用,类似于C语言中的指针。在空间中只有一份保存。copy()方法是一种完全复制,存储空间中存在有两份数据,完全一致。

【4】count方法用以统计指定元素在列表中出现的次数

【5】extend将多个值附加到列表的末尾,它看起来类似于序列的相加,但是不同的是,extend会修改被扩展的列表,extend等价于a = a + b。很显然,前者的效率更高。

【6】index在列表中查找第一次出现该值的索引

【7】insert  用于将一个对象插入列表

【8】reverse按照相反的顺序排列列表中的元素

【9】列表的排序

①sort方法:对列表进行排序,且是对原列表的修改,没有副本一说,更没有返回值

②sorted函数 ,使用该函数也可以完成对列表的排序,但是不同于sort,它不修改原始列表,而是通过copy后,进行排序,有返回值。

 到这里,Python的列表部分知识就介绍完了。主要是将序列的通用知识进行了说明,重点阐述了List的特殊操作和方法,对可能引起混淆的知识进行了辨析,后续有新的关于列表的认识和新的知识点,将在这篇文章里持续更细~

总结

到此这篇关于Python列表(list)操作的方法的文章就介绍到这了,更多相关Python列表list操作方法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python中np.random.permutation函数实例详解

    python中np.random.permutation函数实例详解

    np.random.permutation是numpy中的一个函数,它可以将一个数组中的元素随机打乱,返回一个打乱后的新数组,下面这篇文章主要给大家介绍了关于python中np.random.permutation函数的相关资料,需要的朋友可以参考下
    2023-04-04
  • python如何定义一个迭代器去生成偶数数列

    python如何定义一个迭代器去生成偶数数列

    这篇文章主要介绍了python如何定义一个迭代器去生成偶数数列问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-02-02
  • python中cv2模块如何安装使用

    python中cv2模块如何安装使用

    这篇文章主要给大家介绍了关于python中cv2模块如何安装的相关资料,CV2指的是OpenCV2(Open Source Computer Vision Library),是一个开源的库平台计算机视觉库,有很强大的图片处理功能,可实现图像处理和计算机视觉方面的很多通用算法,需要的朋友可以参考下
    2023-10-10
  • Python如何将将模块分割成多个文件

    Python如何将将模块分割成多个文件

    这篇文章主要介绍了Python如何将将模块分割成多个文件,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-08-08
  • Python编程中对super函数的正确理解和用法解析

    Python编程中对super函数的正确理解和用法解析

    可能有人会想到,Python中既然可以直接通过父类名调用父类方法为什么还会存在super函数?其实,很多人对Python中的super函数的认识存在误区,本文我们就带来在Python编程中对super函数的正确理解和用法解析
    2016-07-07
  • Python实现.gif图片拆分为.png图片的简单示例

    Python实现.gif图片拆分为.png图片的简单示例

    有时候需要把GIF图片分解成一张一张的静态图,jpg或者png格式,下面这篇文章主要给大家介绍了关于Python实现.gif图片拆分为.png图片的相关资料,需要的朋友可以参考下
    2023-01-01
  • python的多元数据类型(上)

    python的多元数据类型(上)

    这篇文章主要为大家详细介绍了python的多元数据类型,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11
  • 如何生成对角矩阵 numpy.diag

    如何生成对角矩阵 numpy.diag

    这篇文章主要介绍了如何生成对角矩阵 numpy.diag,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-05-05
  • PyQt5多线程实现UI不卡顿的解决方案

    PyQt5多线程实现UI不卡顿的解决方案

    在PyQt5中,为了避免长时间的操作阻塞UI界面(导致界面卡死),我们可以使用多线程,通常,我们将耗时的任务放在一个单独的线程中运行,,并通过信号与槽机制与UI线程进行通信,以更新界面,下面是一个示例,演示了如何在更新UI的同时进行多线程操作,确保UI界面不会卡死
    2026-01-01
  • Python高级应用实例对比:高效计算大文件中的最长行的长度

    Python高级应用实例对比:高效计算大文件中的最长行的长度

    在操作某个很多进程都要频繁用到的大文件的时候,应该尽早释放文件资源(f.close()),只有这样才能算是一则高效率的代码,下面我们就来分析下这3种方法的优劣
    2014-06-06

最新评论