可变序列,包含若干元素的有序连续的内存空间。形式上,列表中所有元素放在[ ]中相邻元素用 , 分隔。列表增加或者删除元素时,列表对象自动进行内存的扩展或收缩,从而保证元素之间没有缝隙。(内存自动管理功能)但是插入和删除非尾部元素时,会涉及列表中大量元素移动,效率低。某些操作可能导致意外错误。应尽量从列表的尾部进行元素的增加或者删除。可以提高列表处理速度,保证得到正确结果。
同一个列表中元素的数据类型可以各不相同。
Python是基于值的内存管理模式,变量不直接存储值,而是存储值的引用,列表中的元素也是存储值的引用,所以列表中元素可以是不同类型的数据。
“工厂函数” tuple() set() dict()
列表keyi可以通过下标来访问里边的元素。还支持复数作为下标。-1表示最后一个元素。-2倒数第二个元素。
列表不在使用时,使用 del 命令将其删除。也可以利用del命令删除列表,字典等可变序列中的元素,而不可删除元组,zifu字符串等不可变序列中的部分元素。不可变序列也不可以通过下标进行修改。
通过help(list)查看列表的一些方法
append(元素)向列表尾部追加一个元素 insert(index,元素)向列表任意一个位置插入一个元素extend(另一个列表)将另一个列表的所有元素追加到当前列表的尾部。这三个方法都不会影响列表对象在内存中的起始地址。
+和*也可以实现列表增加元素的目的,但是这两个运算符不属于原地操作符,而是返回新的列表。
+ *返回的地址是不同的
list.pop(index)删除并返回指定位置的元素(默认值为-1) remove(x) 删除列表中第一个与x的值相等的元素 clear()用于清空列表
这三个方法属于原地操作,不影响列表对象的内存地址。也可以用del删除指定位置的元素。
在列表中char插入或者删除元素,
会影响该位置后面所有元素的下标,尽量避免在列表中间位置进行元素的插入和删除。
count() 返回列表中指定元素出现的次数
index()返回指定元素在列表中首次出现的位置,不存在则会抛出异常
sort()按照指定规则进行排序
reverse() 列表中的所有元素进行反转
以上两个是对列表进行原地排序(处理后的数据替换原来的数据)
内置函数sorted() reversed() 返回的是新列表不对原列表进行修改。42页
列表推导式:list=[expression for var in range ]
list 表示新生成的列表名,expression表达式用于计算新列表的元素。
var 循环变量 range 用range生成新的range对象
l=[expression for var in list]
l=[expression for var in list if condition]
一些内置函数也可以对列表进行一些操作。
max() min() sum() len() (返回列表中元素的个数) zip() (将多个列表中元素重新组合为元组并返回包含这些元组的zip对象
enumerate()函数 返回包含若干下标和值的迭代对象。
map()可以将一个函数依次作用到序列或迭代器对象的每个元素上,并返回一个map对象作为结果。其中每个元素都是原序列中元素经过该函数处理后的结果,不对原序列或迭代器对象做任何修改。
44页
标准库 functools 中的reduce()可以将一个接受2个参数的函数以累计的方式从左到右依次作用到一个序列或迭代器对象的所有元素上。
内置函数filter()将一个单参数函数作用到一个序列上,返回该序列中使得该函数返回值为True的那些元素组成的filter对象,如果指定函数为None,则返回序列中等价于True的元素。
列表支持与整数的乘法运算,表示列表元素进行重复并生成新列表,不对原列表进行修改。
列表不支持整数的加减除,也不支持列表之间的减乘除操作。列表之间的加法表示列表元素的合并,生成新列表。
列表推导式:语法
[表达式 for 变量 in 序列或迭代对象 ]
过滤不符合条件的元素:使用if子句
下面代码用列表推导式查找列表中最大元素的位置:
切片是Python序列重要操作之一。使用两个冒号分隔的3个数字来完成
sname[start:end:step]
start表示切片的开始位置(包括,不指定则默认值为0)
end表示切片的截止位置(不包括)
step步长如果省略默认为1省略步长时,最后一个冒号也可以省略。