UC头条:聊聊python中的list——基本操作
在学习数据结构的时候,从老师和同学口中得知了python中用于实现线性表的list(列表)。在查阅相关资料后,感觉这真是一个有趣又好用的数据结构。于是打算写几篇博客,加深对list原理和使用方法的理解。
先来讲讲list的定义和基本用法吧~
定义: 列表是由一系列按特定顺序排列的元素组成。此时表中的元素不再像c,cpp, java一样只能是同一类型,而是可以根据自己的需求,添加任意类型的元素(数,字符串,列表,集合,元组,字典)且长度不限(具有和vector类似的内存模型)。
基本操作:
1.定义列表
Python 中用方括号 [ ] 来表示列表,并且用逗号来分隔其中的元素。
student =[123.21,'xiaomin','小红']#python中的单双引号没有区别print(student)#输出[123.21, 'xiaomin', '小红']
2.访问元素
定义好列表之后很自然的就是去访问类表中的元素啦~ python中的访问方式和java类似,都是使用索引(一个数字,唯一的描述每一个元素在列表中的位置)进行访问。
student =[123.21,'xiaomin','小红']print(student[1])#输出xiaomin
2.1关于索引为负的讨论:
在c和cpp中:
如果数组的索引为负,在编译时不会出现问题,当时在运行时则会出现异常并退出。(甚至还可能由于随机访问到了不该访问的内存,被电脑的杀毒软件视作病毒藍)
在java中:
由于抛出异常机制的存在,当数组索引为负时,将会出抛'ArrayIndexOutOfBoundsException'异常。
而在python中就大不一样喽!
在 Python 中,索引值可以为负数,负数的意思并不是说第一个位置之前还有并行时空的元素,而是表示从数组后面的位置开始计算,比如 -1 就代表最后一个元素,-2 就代表倒数第二个元素。
student =[123.21,'xiaomin','小红']print(student[-1])#输出小红
虽然索引可以为负数,但不意味着这个负数可以随便选取,索引的绝对值需小于数组的长度。
例如:
student =[123.21,'xiaomin','小红']print(student[-10])#会输出IndexError: list index out of range
3.添加元素
3.1 append
添加单个元素到List的尾部, 只接受一个参数,参数可以是任何数据类型,被添加的元素在List中保持着原先结构类型。
例1.添加字符串
student =[123.21,'xiaomin','小红'] student.append('lalala')print(student)#输出:[123.21, 'xiaomin', '小红', 'lalala']
例2.添加元组
student =[123.21,'xiaomin','小红'] temp =('胖虎','小夫','大雄') student.append(temp)print(student)#输出:[123.21, 'xiaomin', '小红', ('胖虎', '小夫', '大雄')]
例3.添加列表
student =[123.21,'xiaomin','小红'] temp =['胖虎','小夫','大雄'] student.append(temp)print(student)#输出:[123.21, 'xiaomin', '小红', ['胖虎', '小夫', '大雄']]
可以看出原有的数据类型并没有发生改变。
3.2 extend
extend 和 append 的区别在于:extend 不会把列表或者元祖视为一个整体,而是把它们包含的元素逐个添加到列表中。
例1.添加元组
student =[123.21,'xiaomin','小红'] temp =('胖虎','小夫','大雄') student.extend(temp)print(student)#输出:[123.21, 'xiaomin', '小红', '胖虎', '小夫', '大雄']
例2.添加列表
student =[123.21,'xiaomin','小红'] temp =['胖虎','小夫','大雄'] student.extend(temp)print(student)#输出:[123.21, 'xiaomin', '小红', '胖虎', '小夫', '大雄']
可以看到元组和列表的元素都被拆开。
3.3 insert
insert语法格式: listname.insert(index , obj)
insert 允许使用索引(也就是元素插入的位置),向list中插入元素。当索引值大于等于list的长度时,一律视为在list尾部插入一个元素。
而当插入列表或者元祖时,insert 也会将它们视为一个整体,作为一个元素插入到列表中,这一点和 append 是一样的。
student =[123.21,'xiaomin','小红'] temp =('胖虎','小夫','大雄') student.insert(314, temp)print(student)#输出:[123.21, 'xiaomin', '小红', ('胖虎', '小夫', '大雄')]
4.修改元素
4.1 修改单个元素
修改单个元素就很简单啦,只需要使用索引赋值就可以了~
student =[123.21,'xiaomin','小红'] student[0]=3.14#使用正索引 student[-1]='胖虎'#使用负索引print(student)#输出:[3.14, 'xiaomin', '胖虎']
4.2修改一组元素
python允许使用切片操作进行区间修改。
戳我看切片详解哦~
例1.指定起始索引和终止索引(注意python的区间是左闭右开)
#修改一组元素的值 student =[123.21,'xiaomin','小红'] student[0:2]=['胖虎','小夫']#修改第零个和第一个元素的值,不包括第二个元素print(student)#输出:['胖虎', '小夫', '小红']
在测试的时候发现修改部分的元素数量可以大于指定长度,在修改完指定元素后,将多余元素插入到指定位置的后面。
student =[123.21,'xiaomin','小红'] student[0:2]=['胖虎','小夫','大雄']print(student)#输出:['胖虎', '小夫', '大雄', '小红']
对空切片赋值,相当于插入一组新的元素:
student =[123.21,'xiaomin','小红'] student[1:1]=['胖虎','小夫','大雄']print(student)#输出:[123.21, '胖虎', '小夫', '大雄', 'xiaomin', '小红']
5.删除元素
5.1根据索引值删除元素
python的lis中共有两种操作根据索引值删除元素,一是del,二是pop。下面分别举例讲解:
(1) del 是 Python 中的关键字,专门用来执行删除操作,它不仅可以删除整个列表,还可以删除列表中的某些元素。
删除单个元素的格式为:del listname[index]
输出连续元素的格式为:del listname[start : end]<区间左闭右开>
student =[123.21,'xiaomin','小红']del student[1]#注意这里是方括号,因为不是方法print(student)#输出;[123.21, '小红']student =[123.21,'xiaomin','小红']del student[1:3]print(student)#输出:[123.21]
(2) pop 方法用来删除列表中指定索引处的元素
格式如下:listname.pop(index)
student =[123.21,'xiaomin','小红'] student.pop(1)print(student)#输出:[123.21, '小红']
思考:python的list功能与STL中的list类似,但STL中的list同时具有pop( ) 和push( ) 两个对应的方法,而在python的list中却只有pop( ),这是为什么呢?
5.2根据元素值进行删除
remove 方法用来删除和参数相同的第一个元素。如果需要删除的元素不存在,则会报错。
student =[123.21,'xiaomin','小红'] student.remove('小红')print(student)#输出:[123.21, 'xiaomin']student =[123.21,'xiaomin'] student.remove('小红')print(student)#出现错误:list.remove(x): x not in list
5.3清空列表
clear( )方法用于清空列表
student =[123.21,'xiaomin','小红'] student.clearprint(student)#输出: []
好啦关于列表的基本操作就讲到这里啦~下一篇咱们就来看看list的底层实现,揭开list为什么可以存储各种元素的神秘面纱。