您的当前位置:首页正文

组合数据类型(序列:列表)

2024-11-30 来源:个人技术集锦

列表是一种序列类型的扩展,十分常用

列表是一种序列类型,创建后可以随意被修改

我们通过代码示例去详细解析列表的有关方法及其实现。

方括号[ ]真正的创建一个列表,赋值仅传递引用

列表的创建:

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,依此类推。

索引形式为:list[n]  #n为索引的位置,表明访问列表list中索引为n的元素。

代码示例如下:

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)

运行界面如下: 

我们进行如下总结:

要求对应代码
定义空列表ltlt=[]
向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中是否包含数字00 in lt
判断lt中是否不包含数字00 not in lt
向lt新增数字0lt.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]]  

此种格式比较复杂,应用不多,有兴趣可自行了解。

显示全文