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

目录

创建一个列表

列表元素的访问

列表的切片

利用切片索引

切片的步长

利用切片赋值

列表的方法

添加和插入元素

删除元素

复制列表

其他方法


列表是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方法不会返回任何值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值