列表是一种序列类型的扩展,十分常用
列表是一种序列类型,创建后可以随意被修改
我们通过代码示例去详细解析列表的有关方法及其实现。
方括号[ ]真正的创建一个列表,赋值仅传递引用
1.使用[ ]进行创建
[ ]中包括的是列表元素,列表元素可以是整型、浮点型、字符串等基本类型,也可以是列表、元组、字典等组合类型,还可以是其他自定义类型。元素间用逗号分割。
列表中各元素类型可以相同,也可以不同,无长度限制。
示例代码如下:
ls=['rgf','love','ypl',1314] #列表中元素类型不同 ls_one=['rgf','hjc','cyn'] #列表中元素类型均为字符串类型 ls_two=['wo','er',ls_one] #列表中元素类型嵌套了一个元素类型 print(ls) print(ls_one) print(ls_two)
运行界面如下:
2.使用list()函数创建列表。
list函数接受一个可迭代类型的数据,返回为一个列表。
对于什么是可迭代对象,就是支持通过for……in……语句迭代获取数据的对象就是可迭代对象,比如字符串和列表,还有集合,字典,文件类型的数据可作为可迭代对象。
我们通过函数isinstance()函数判断目标是否为可迭代对象
判断可迭代方法代码示例如下:
from collections.abc import Iterable ls=[3,4,5] print(isinstance(ls,Iterable)) print(list(ls))
运行界面如下:
函数创建方法如下:
a=list([1]) b=list("python") c=list([1,"python"]) print("a={},b={},c={}".format(a,b,c))
运行界面如下:
列表类型中,元素存在正向递增的序号的索引关系和反向递减序号的索引关系
正向递增索引从左向右依次递增,第一个元素的索引为0,第二个元素的索引为1,依此类推;反向递减索引从右向左依次递减,从右数第一个元素的索引为-1,第2个元素的索引为-2,依此类推。
代码示例如下:
ls=['rgf','love','ypl',1314] print(ls[1])
运行界面如下:
切片用于截取列表中的部分元素,获取一个新列表。
切片形式为:ls[m:n:step] #按步长step获取列表ls中索引m~n对应的元素,不包括ls([n]),step默认为1。m和n可以省略,m缺失表示从列表开头开始到第n个位置之前,n缺失表示从第m个位置开始到列表末尾结束。
对应代码如下:
ls=['rgf','love','ypl',1314] print(ls[1:3:2]) #从第一位置到第三位置以2为步长进行获取元素 print(ls[2:]) #从第二位置开始到列表末尾 print(ls[:2]) #从列表开头到列表第二个位置之前 print(ls[1:3]) #从第一位置到第三位置以默认1为步长进行获取元素 print(ls[:]) #获取列表全部元素
运行界面如下:
(1)ls.append(x),在列表ls最后增加一个元素x
代码示例如下:
ls=['rgf','love','ypl',1314] ls.append(521) print(ls)
运行界面如下:
(2)ls.clear(),删除列表ls中所有元素。
代码示例如下:
ls=['rgf','love','ypl',1314] ls.clear() print(ls)
运行界面如下:
(3)ls.copy(),生成一个新列表,赋值ls中所有元素。
代码示例如下:
ls=['rgf','love','ypl',1314] lt=ls.copy() print(lt)
运行界面如下:
(4)ls.insert(i,x),在列表ls的第i位置增加元素x.
代码示例如下:
ls=['rgf','love','ypl',1314] ls.insert(1,521) print(ls)
运行界面如下:
(5)ls.pop(i),将列表ls中第i位置元素取出并删除该元素。
代码示例如下:
ls=['rgf','love','ypl',1314] ls.pop(3) print(ls)
运行界面如下:
(6)ls.remove(x),将列表ls中出现的第一个元素x删除
代码示例如下:
ls=['rgf','love','ypl',1314] ls.remove(1314) print(ls)
运行界面如下:
(7)ls.reverse(),将列表ls中的元素反转
代码示例如下:
ls=['rgf','love','ypl',1314] ls.reverse() print(ls)
运行界面如下:
(8)ls.extend(),用于在列表末尾一次性添加另一个列表中的所有元素,即使用新列表扩列原来的旧列表。
代码示例如下:
ls=['rgf','love','ypl',1314,521] ls_new=['rgf','love','ypl',1314] ls_new.extend(ls) print(ls_new)
运行界面如下:
(9)sort()方法,用于按特定顺序对列表元素进行排序。
语法格式如下:
sort(key=None,reverse=False)
以上格式中参数key用于指定排序规则,该参数可以是列表支持的函数,默认值为None,参数reverse用于控制列表元素排序的方式,该参数可以取值True或者False,取值为True表示降序排列,取值为False(默认值)表示升序排列。
代码如下所示:
ls=[1,58,64,1314,521] ls_1=[1,58,64,1314,521] ls_new=['rgf','love','ypl','yuehanwoer'] ls.sort() #按照默认升序进行排列 ls_1.sort(reverse=True) #按照True降序进行排列 ls_new.sort(key=len) #按照字符串长度进行排列 print(ls) print(ls_1) print(ls_new)
运行界面如下:
(10)sorted方法用于按升序排列列表元素,该方法的返回值是升序排列后的新列表,排列操作不会对原列表产生影响。
代码示例如下:
ls=[1,58,64,1314,521] ls_one=['rgf','love','ypl','yuehanwoer'] a=sorted(ls) b=sorted(ls_one) print(ls) print(ls_one) print(a) print(b)
运行界面如下:
(1)ls[i]=x,替换列表ls第i个元素为x
代码示例如下:
ls=['rgf','love','ypl',1314] ls[1]=521 print(ls)
运行界面如下:
(2)ls[i:j:k]=it, 用列表it替换ls切片后所对应元素子列表
代码示例如下:
ls=['rgf','love','ypl',1314] lt=[521] ls[1:2:1]=lt print(ls)
运行界面如下:
(3)del ls[i] ,删除列表中第i个元素。
代码示例如下:
ls=['rgf','love','ypl',1314] del ls[3] print(ls)
运行界面如下:
(4)ls+=lt,更新列表ls,将列表lt元素增加到列表ls中。
代码示例如下:
ls=['rgf','love','ypl',1314] lt=[521] ls+=lt print(ls)
运行界面如下:
(5)ls*=n,更新列表ls,其元素重复n次。
代码示例如下:
ls=['rgf','love','ypl',1314] ls*=3 print(ls)
运行界面如下:
(6)del ls[i:j],删除列表ls中第i到j中的元素。
代码示例如下:
ls=['rgf','love','ypl',1314] del ls[1:3] print(ls)
运行界面如下:
(7)del ls[i:j:k],删除列表ls中第i到第j以k为步长的元素。
代码界面示例一如下:
ls=['rgf','love','ypl',1314] del ls[1:3:2] print(ls)
运行界面如下:
代码界面示例二如下:
ls=['cat',1,2,3,4,'tiger',1024] del ls[::3] print(ls)
运行界面如下:
我们进行如下总结:
要求 | 对应代码 |
定义空列表lt | lt=[] |
向lt新增5个元素 | lt+=[1,2,3,4,5] |
修改lt中第二个元素 | lt[2]=5 |
向lt中第2个位置增加一个元素 | lt.insert[位置数,所插入的数] |
从lt中第一个位置删除一个元素 | del lt[位置数] |
删除lt中第1-3位置元素 | del lt[1:3] |
判断lt中是否包含数字0 | 0 in lt |
判断lt中是否不包含数字0 | 0 not in lt |
向lt新增数字0 | lt.append(0) |
返回数字0所在lt中的索引(序列里面详细描述了) | lt.index(0) |
lt的长度 | len(lt) |
lt中最大元素 | max(lt) |
清空lt | lt.clear() |
序列类型最主要用来做数据表示,其中元组用于表示元素不改变的引用场景(比如函数的通用返回值return),更多用于固定搭配场景。
列表更加灵活,它是最常用的序列类型。最主要作用是表示一组有序数据,进而操作它们。
代码如下所示:
ls=['rgf','love','ypl',1314] tp=('rgf','love','ypl',1314) for item in ls: print(item) for item in tp: #tp是元组类型的一个变量。 print(item)
运行界面如下:
数据保护:
如果不希望数据被程序所改变,转换成元组类型。
代码如下:
ls=['rgf','love','ypl',1314] lt=tuple(ls) print(lt)
运行界面如下:
列表推导式的基本格式如下:
[exp for x in list]
for in 语句用于遍历列表(或其他可迭代对象);exp用于在每层循环中对列表中的元素进行运算。
代码示例如下:
ls=[1,58,64,1314,521] ls=[data*data for data in ls] print(ls)
运行界面如下:
(1)带有if语句的列表推导式:
[exp for x in list if cond]
该格式的功能为遍历列表,若列表中的元素x符合条件cond,按表达式exp对其进行运算后将其添加到新列表中。
代码示例如下:
ls=[1,58,64,1314,521] ls=[data*data for data in ls if data>66] print(ls)
运行界面如下:
(2)嵌套for循环语句的列表推导式:
[exp for x in list_1 for y in list_2]
以上格式中的for语句按从左到右的顺序分别是外层循环和内层循环,利用此格式可以根据两个列表快速生成一个新的列表。
代码格式如下:
ls_1=[1,2,3] ls_2=[3,4,5] ls_3=[x+y for x in ls_1 for y in ls_2] print(ls_3)
运行界面如下:
(3)带有if语句和嵌套for循环语句的列表推导式:
列表推导式中嵌套的for循环可以有多个,每个循环也都可以与if语句连用,其语法格式如下:
[exp for x in list [if cond] for y in list_one [if cond]…………
for n in list_n[if cond]]
此种格式比较复杂,应用不多,有兴趣可自行了解。