python进阶(列表的高级特性)
前面我们学过了列表的一些简单的特性,本期我们介绍列表的高级操作:切片、内置函数、列表推导式。有了函数的基础,本期的知识相信大家就不难理解了。切片 切片实际上是对列表进行截取的操作,它需要使用英文冒号,两边分别是起始的元素编号。
>>> list = [11, 22, 33, 44, 55]# 截取序号为1~3的元素,以列表的形式返回
>>> list[1:4]
[22, 33, 44]# 截取序号为3到结束的所有元素,以列表的形式返回
>>> list[3:]
[44, 55]# 截取序号为0~2的所有元素,以列表的形式返回
>>> list[:3]
[11, 22, 33]# 不进行截取操作,返回完整的列表
>>> list[:]
[11, 22, 33, 44, 55]# 可以用slilce()方法来获取特定的编号# 获取序号0~3,注意步长为2,表示每2个元素中取1个元素
# 实际上只获取到序号为0和2的元素
s1 = slice(0,4,2)
>>> list[s1]
[11, 33]# 步长的默认参数是1,默认参数在《函数2》中讲过
s2 = slice(0,4)
>>> list[s2]
[11, 22, 33, 44]
列表操作方法 python内置了一些处理列表的方法:
# 列表的各种操作方法示例:# 初始的列表
>>> list = [11, 22, 33, 44, 55]# 使用append()在列表尾部增加一个元素
>>> list .append(66)
>>> print(list)
[11, 22, 33, 44, 55, 66]# 使用extend()方法在列表尾部拼接另一个列表
>>> list.extend([55, 44, 33, 22, 11])
>>> print(list)
[11, 22, 33, 44, 55, 66, 55, 44, 33, 22, 11]# 使用insert()方法在序号为6的位置插入一个元素77,
# 原来序号大于等于6的元素,序号全部加1,低于6的元素不变
>>> list.insert(6, 77)
>>> print(list)
[11, 22, 33, 44, 55, 66, 77, 55, 44, 33, 22, 11]# 使用remove()方法删除第一个值为77的元素
>>> list.remove(77)
>>> print(list)
>>> print(list)
[11, 22, 33, 44, 55, 66, 55, 44, 33, 22, 11]# 使用pop()方法删除列表中序号为5的元素,注意pop和remove的区别[1]
>>> list.pop(5)
>>> print(list)
>>> print(list)
[11, 22, 33, 44, 55, 55, 44, 33, 22, 11]
# 直接使用list.pop(),默认删除最后一个元素,
# 利用append()和pop()可以实现堆栈的push()和pop()的功能# 清除列表中的所有元素
>>> list.clear()
>>> print(list)
[]list = [11, 22, 33, 44, 55, 66, 55, 44, 33, 22, 11]
# 返回第一个值为44的元素的序号
>>> list.index(44)
3# 统计值为44的元素的个数
>>> list.count(44)
2# 为列表排序,从小到大,
>>> list.sort()
>>> print(list)
[11, 11, 22, 22, 33, 33, 44, 44, 55, 55, 66]
>>> list_2 = [2,21,223,'BCc','B', 'bc' ,'a']
>>> list_2.reverse()
>>> print(list_2)
['a', 'bc', 'B', 'BCc', 223, 21, 2]# 将列表元素的顺序颠倒
>>> list.reverse()
>>> print(list)
[66, 55, 55, 44, 44, 33, 33, 22, 22, 11, 11]# 返回列表的浅复制
>>> list.copy()
[66, 55, 55, 44, 44, 33, 33, 22, 22, 11, 11]
二维列表 python中是没有二维列表这个概念的,下面要说的二维列表本质上还是一维列表,只不过这个一维列表的元素都是一维列表。因此,一维列表的性质,二维列表都具备。之所以介绍二维列表,是因为某些情况下引入二维列表这个概念会使问题简化。
# 创建一个空二维列表
>>> list = [[]]# 二维列表的元素都是列表,想获取元素需要取两次索引
>>> list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
>>> print(list[0])
[1, 2, 3]
>>> print(list[0][0])
列表推导式 使用表达式来处理列表中的每一个元素,生成一个新的列表,这就是列表推导式[2]。前面我们在匿名函数的时候,就使用过列表推导式。
# 列表推导式的基本格式,if部分可以不用
[表达式 for 索引 in 列表 if 条件表达式]# 相当于下面的代码
result = []
for 索引 in 列表:
if 条件表达式:
result.append(表达式)# 简单的列表推导式示例
>>> list_1 = [11, 22, 33, 44, 55, 66]
>>> list_2 = [i/11 for i in list_1]
>>> print(list_2)
[1.0, 2.0, 3.0, 4.0, 5.0, 6.0]# 添加条件语句
>>> list_1 = [11, 22, 33, 44, 55, 66]
>>> list_2 = [i/11 for i in list_1 if i%2==0]
>>> print(list_2)
[2.0, 4.0, 6.0]# 利用列表推导式,构建二维列表,其中每个元素都是0
>>> x, y = 3, 4
>>> list = [[0 for i in range(x)] for j in range(y)]
>>> print(list)
[[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]
聪哥看了《通过示例学习Python列表推导》[3]这篇文章之后,发现列表推导式的竟然还有这么多精彩的打开方式,感兴趣的同学可以看看。
总结
- 列表的重要功能是切片,可以截取某个列表中的任意一段作为列表
- python内置了许多用于处理列表的方法,大家需要活学活用
- 特定情况下,使用二维列表会简化编码
- 列表推导式可以简化代码,也体现了python简洁之美
# 1.请编写一个函数,获取字符串中所有的数字,
# 并将它们按照从大到小的顺序排列
# 2.请编写一个函数,找出一个列表中重复次数最多的数字
# 如果遇到次数相等的情况,则一并输出# 1.
# 必须要引入re模块,否则不能使用compile方法
import re
def get_numbers(string):
# 利用re模块和正则表达式查找出所有的数字
pattern = re.compile(r'\d+')
array = pattern.findall(string)
# 按从小到大的顺序排序
array.sort()
# 将顺序颠倒成从大到小
array.reverse()
return array# 2.
def search(array):
# 使用set()方法返回一个集合,自动去除了重复元素
# list()方法将集合转化为列表
array1 = list(set(array))
# 获取array1中每个元素的重复次数,因此有:len(array1) == len(array2)
array2 = [array.count(i) for i in array1]
# 获取重复次数最大的元素
array3 = [array1[i] for i in range(len(array2)) if array2[i] == max(array2)]
return array3# 上面利用了集合的概念,实现了去除列表中重复元素
# 没接触过集合的同学,可以使用以下代码实现同样的效果
array1 = []
for i in array:
if i not in array1:
array1.append(i)
参考资料
- 《Python对于列表的del, remove, pop操作的区别》原文链接:http://blog.csdn.net/lachesis999/article/details/53353745
- 《Python中的推导式使用详解》原文链接:http://www.jb51.net/article/67157.htm
- 《通过示例学习Python列表推导》:http://python.jobbole.com/80823/
文章图片
聪哥python 【python进阶(列表的高级特性)】
推荐阅读
- 用Python爬取中国新说唱歌曲信息
- C++|C++ 【类和对象: 初始化列表,Static成员 --3】
- 大数据|【毕业设计】基于HMM隐马尔科夫的股票预测 - 机器学习 股票预测 python
- 毕业设计|【毕业设计】信用卡欺诈检测系统 - python 大数据
- Python|Linux服务器配置Python+PyTorch+CUDA深度学习环境
- 毕业设计|【毕业设计】opencv+python+深度学习 实现公式识别
- 毕业设计|【毕业设计】Python B站数据分析 用户情感分析 - 大数据项目
- 毕设选题|【毕业设计】深度学习交通车辆流量分析 - 目标检测与跟踪 - python opencv
- python|核酸检测识别系统——总章
- python 提取dataframe中某一列为list_Python-Pandas-DataFrame 如何把df变为以数据中的某一列为index...