python序列(一):列表的创建、访问、切片和方法 您所在的位置:网站首页 可以对元组进行切片访问和修改操作 python序列(一):列表的创建、访问、切片和方法

python序列(一):列表的创建、访问、切片和方法

2024-07-01 21:14| 来源: 网络整理| 查看: 265

目录

创建一个列表

列表元素的访问

列表的切片

利用切片索引

切片的步长

利用切片赋值

列表的方法

添加和插入元素

删除元素

复制列表

其他方法

列表是Python很常用的数据类型,用方括号来表示,中间元素用英文逗号分割

创建一个列表 Game = ['Crossfire', 'Dota', 'CSGO', 'Apex'] Number = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

值得提到的是,列表内的数据可以是不同的数据类型

List1 = [123, 'Python', 456, "苹果", [1, 2, 3]]

列表也是可以嵌套列表的。接下来假设一种应用场景,创建一个学生宿舍的数据库,每个寝室号收录入住学生的姓名

Room_301 = ['Li Hua', 'Zhang San', 'Li Si', 'Wang Wu'] #房间301 Room_302 = ['Han Meimei', 'Julie', 'Alice'] #房间302 Room_303 = ['Trump', 'James', 'Tom'] #房间303

由此可见这是一个国际化男女混寝哈,不过这不重要。每个寝室的寝室号要收录在一个总宿舍楼栋中:

Dormitory_1 = [Room_301, Room_302, Room_303] #1号宿舍楼

这个学校有多个宿舍楼栋,那么就可以将所有宿舍楼栋纳入一个列表:

Dormitory_2 = [] #2号宿舍楼 Dormitory_3 = [] #3号宿舍楼 Dormitory = [Dormitory_1, Dormitory_2, Dormitory_3] 列表元素的访问

使用编号来访问列表中的元素,从0开始递增,同样使用方括号。

比如,访问上述列表Game中的第一个元素:

print(Game[0]) #输出为Crossfire

如果像单个宿舍楼栋那样的二级列表,怎么访问其中的一级人员元素呢?

再加个中括号就行了,三级列表同理,例如访问1号楼栋301中的李华:

print(Dormitory_1[0][0]) #输出为Li Hua print(Dormitory[0][0][0]) #输出为Li Hua

如果想访问列表中的最后一个元素,元素的编号可以用-1表示:

print(Game[-1]) #输出为Apex

同理,列表中倒数第二、第三个元素就可以用-2,-3来表示了。

列表的切片 利用切片索引

如果需要访问列表中连续多个元素,逐个访问或者使用循环访问显得有些麻烦。所以需要使用切片访问,可以使用两个索引,中间用冒号分隔:

Number = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] print(Number[0:3]) #访问Number中的第1到第3个数字,输出为[0, 1, 2]

注意,冒号前的数字表示列表第n+1个元素开始,冒号后的数字表示到列表的第k个元素。

那么如果想访问列表的前三个元素,那么就可以进行一下简写,省略掉冒号前的数字,上述代码刚好符合该条件。

print(Number[:3]) #访问Number中前三个数字,输出为[0, 1, 2]

如果想访问后四个元素呢?那就要使用负数进行切片:

print(Number[-4:]) #访问Number中后四个数字,输出为[6, 7, 8, 9] print(Number[-4:-1])#输出为[6, 7, 8] print(Number[-4:-6])#输出为[] print(Number[-4:0]) #输出为[]

第二行代码表示,使用负数进行索引时,冒号前的-n代表从倒数第n个元素开始,冒号后的-k代表到列表倒数第k+1个元素结束,和使用正数索引是相反的。

第三行代码表示,在使用切片操作时,如果第一个索引指定的元素Number[-4]在第二个索引指定的元素Number[-6]后面,结果就会为空序列。

第四行代码同理,索引0表示列表的第一个元素,在索引-4的前面,所以还是会输出空列表。

所以可以举一反三出其他的切片方式:

print(Number[:-2]) #连续访问到列表倒数第三个元素,输出为[0, 1, 2, 3, 4, 5, 6, 7] print(Number[:]) #访问整个序列,输出为[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

那进而又会产生另一个问题,如果我想从右向左提取列表元素呢?

切片的步长

在切片操作中,是可以选择步长的。在上述操作中,我们提取列表中的元素步长为1,即从一个元素直接移动到下一个元素,只不过我们省略了这个参数,省略情况下参数默认为1。

如果我们想显式地指定这个参数,就会衍生出更多的操作,就比如刚才提到的从右向左提取列表元素,我们只需要将步长设定为-1:

print(Number[-4:-6:-1]) #输出为[6, 5]

当步长为2时,就会在指定的起点和终点中每隔一个元素提取一个元素:

print(Number[0:10:2]) #输出为[0, 2, 4, 6, 8]

实际上,Python的语法往往都不那么严格,所以提取到的起始和最终元素不需要与给定的起点和终点完全重合:

print(Number[0:9:2]) #输出为[0, 2, 4, 6, 8] print(Number[::2]) #输出为[0, 2, 4, 6, 8]

将终点的10换成了9,输出结果还是一样的,因为步长为2的时候是数不到第10个元素的,提取元素的顺序为第1,3,5,7,9个元素,对应列表中的0,2,4,6,8。

当然,起点和终点也是可以省略的,这样就代表遍历整个列表。

利用切片赋值

利用切片也可以在列表中插入新元素。

Number = [1,2,3] #创建Number列表 Number[3:] = [4, 5, 6] #在列表末尾插入元素 print(Number) #输出为[1, 2, 3, 4, 5, 6]

也可以插在序列中间,并且也是可以反向操作的。

Number = [1, 5, 6] Number[1:1] = [2, 3, 4] #相当于在空切片中插入了[2, 3, 4] print(Number) #输出为[1, 2, 3, 4, 5, 6] Number[1:4] = [] print(Number) #输出为[1, 5, 6] 列表的方法 添加和插入元素

在列表末尾添加一个元素或对象,我们可以用.append方法:

Number = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] #创建Number列表 Number.append(10) #将元素10添加到列表末尾 print(Number) #输出为[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

在列表末尾添加多个元素或对象,可以使用.extend方法

Number1 = [0, 1, 2, 3, 4] #创建Number1列表 Number2 = [5, 6, 7, 8, 9] #创建Number2列表 Number1.extend(Number2) #将Number2的所有元素添加到列表末尾 print(Number1) #输出为[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

需要指定插入的位置,就需要使用.insert方法,用于将一个元素或对象插入列表:

Number = [0, 1, 2, 3, 4, 6, 7, 8, 9] #创建Number列表 Number.insert(5, 'five') #将元素five插入到列表第6个位置 print(Number) #输出为[0, 1, 2, 3, 4, 'five', 6, 7, 8, 9] 删除元素

实现对列表内元素的删除需要使用.pop方法,不指定参数的时候默认删除最后一个元素

Number = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] #创建Number列表 Number.pop() #默认删除最后一个元素 print(Number) #输出为[0, 1, 2, 3, 4, 5, 6, 7, 8] Number.pop(0) #指定删除第一个元素 print(Number) #输出为[1, 2, 3, 4, 5, 6, 7, 8]

如果需要删除指定值的元素,需要用到.remove方法

Name = ['Li Hua', 'Han Meimei', 'Lucy', 'Alice'] #创建人名列表 Name.remove('Lucy') #删除'Lucy'元素 print(Name) #输出为['Li Hua', 'Han Meimei', 'Alice']

使用.remove方法只能删除指定值的第一个元素,即列表中有多个重复元素只能删除掉重复元素中的第一个。

使用del语句也是可以删除列表元素的

Name = ['Li Hua', 'Han Meimei', 'Lucy', 'Alice'] #创建人名列表 del Name[2] #删除第三个元素 print(Name) #输出为['Li Hua', 'Han Meimei', 'Alice'] 复制列表

方法.copy用于复制列表

Num1 = [1, 2, 3] Num2 = Num1.copy() print(Num2) #输出为[1, 2, 3]

注意,使用.copy方法时,两列表不发生关联,即一个列表元素发生改变不会影响复制出来的列表,这与直接用等式赋值是不一样的。

Num1 = [1, 2, 3] Num2 = Num1.copy() print(Num2) #输出为[1, 2, 3] Num2[0] = 2 #将Num2的第一个元素赋值为2 print(Num1) #输出为[1, 2, 3] print(Num2) #输出为[2, 2, 3] Num1 = [1, 2, 3] Num2 = Num1 #用等式赋值 Num2[0] = 2 #将Num2的第一个元素赋值为2 print(Num1) #输出为[2, 2, 3] print(Num2) #输出为[2, 2, 3]

可以看出,利用等式赋值给列表添加了一个名称,本质上还是两个名称对应一个列表,将Num2关联到Num1。而使用.copy方法会产生两个互相独立的列表,也可以理解为将Num2关联到了Num1的副本。

其他方法

.clear清空列表的内容

a = [1, 2, 3, 4] a.clear() print(a) #输出为[]

.count计算指定元素在列表中出现了多少次

a = [1, 2, [2, 6], 4, 1, 1, 3, [2, 6]] print(a.count(1)) #输出为3,表示出现了3次 print(a.count([2, 6])) #输出为2

.index查找指定元素第一次出现时的索引

sentence = ['Hi', 'I', 'am', 'Python', 'I', 'love', 'Python'] print(sentence.index('Python')) #输出为3,表示Python元素第一次出现时的索引为3

.sort对列表直接进行排序

a = [1, 5, 0, 4, 2, 9] a.sort() #对a进行排序 print(a) #输出为[0, 1, 2, 4, 5, 9]

注意,不能直接使用print(a.sort()),否则只会输出None,因为.sort方法不会返回任何值。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有