第五章 列表

目录

一、初识列表

1、列表的理解

2、列表的创建

3、列表的特点

4、列表生成式

 二、列表的查询操作

三、获取列表元素

1、获取列表中的单个元素

2、获取列表中的多个元素-------切片操作

   连续切片操作

 切片操作的三个参数可以用表达式

其他对象的切片操作

3、判断指定元素在列表中是否存在

4、列表元素的遍历

四、列表增加元素操作

1、append():在列表的末尾添加一个元素

2、extend():  在列表的末尾至少添加一个元素

3、insert():  在列表任意位置添加一个元素

4、切片:  在列表任意位置至少添加一个元素

五、列表的删除操作

1、remove():  一次删除一个元素,重复元素只删除第一个,元素不存在则抛出异常

2、pop():  删除一个指定索引位置上的元素

3、切片:  一次至少删除一个元素

4、clear():清空列表

5、del:  删除列表 

 六、列表修改操作

1、为指定索引的元素赋予一个新值

2、为指定的切片赋予一个新值

七、列表的排序操作

1、sort()方法

2、sorted()函数

八、总结

1、列表查询方法 

2、列表增加元素的方法

3、列表元素删除的方法

九、多功能的切片


一、初识列表

1、列表的理解

变量可以存储一个元素,而列表是一个“大容器”,可以存储n多个元素,程序可以方便的对这些数据进行整体操作,列表相当于其他语言中的数组,列表就相当于一个书包,容纳很多“书本”

 列表存储数据的原理:

列表也有自己的id值,列表是一段连续的存储空间存放数据的id值,以得到数据的value值

2、列表的创建

#第一种创建
lst_1 = ['hello','world',98]

#第二种创建方式  使用list函数构建
list_2 = list(['hello','world',98])

3、列表的特点

1、列表元素按顺序有序排序,占用一段连续的存储空间
2、索引映射唯一一个数据,就是每个位置的索引有特定序号,如:list[0],映射0位置的元素,只能是'hello',不论是正索引 或是逆索引(list[-3])得到的仍然是'hello'
3、列表可以存储重复数据
4、任意数据类型都可以混存
5、列表会根据需要动态分配和回收内存,不用担心内存不够或者过多

4、列表生成式

即生成列表的公式,语法格式为:

[列表元素表达式  for 自定义变量 in  range(1,10)]
lst = [i*2 for i in range(1,11)]
print(lst)

 二、列表的查询操作

查询操作index()

依次只能检索一个元素

lst = ['hello','world',98,'hello']
#如果列表中有相同元素只返回列表中相同元素的第一个元素的返回值,一旦索引到就会break
print(lst.index('hello'))
#如果索引的目标不在列表里就会报错

'''还可以在指定范围之间查找,设置起始索引位置和终止索引位置'''
print(lst.index(98,1,3))    #在序列为[1,3)检索98

三、获取列表元素

1、获取列表中的单个元素

注意正向索引是从[0,N-1)  ,逆向索引是从  [-N,-1)

print(lst[3])   #正向索引   从0~N-1
print(lst[-4])  #逆向索引   从-N~-1

hello
hello

2、获取列表中的多个元素-------切片操作

切片语法格式:

列表名[start : stop : step]  步长默认为1可以省略,stop:]也表示步长为一

切片的结果: 原列表片段的拷贝,得到一个新的列表

切片的范围: [start,stop)

  当step为正数时 从前往后开始切片 :

[:stop:step]   ---------->切片的第一个元素默认是列表的第一个元素

[start::step]  ---------->切片的最后一个元素默认是列表的最后一个元素

  当step为负数时 从后往前开始切片:

[:stop:step]   ---------->切片的第一个元素默认是列表的最后个元素

[start::step]  ---------->切片的最后一个元素默认是列表的第一个元素

lst_2 = [10,20,30,40,50,60,70,80]
print('原先的列表',id(lst_2))
lst_3 = lst_2[1 : 6 : 2]
print('切片后的列表',id(lst_3))      #列表id值发生改变说明产生了新的列表对象

原先的列表 1585279841728
切片后的列表 1585276221440

step为负数时

print(lst_2[::-1])    #step为负数时 逆序输出    lst_2[7::-1]

[80, 70, 60, 50, 40, 30, 20, 10]

 当start为负数时,表示取最后几个值,因为当它为负数时表示逆向取值从最后一个数(索引为-1)开始取值,而step为正数所以得到的是正序

lst = [10,20,30,40,50,60,70]
lst2 = lst[-4:]
print(lst2)

 [40, 50, 60, 70]      输出后三个元素

 当stop为负数时,逆向取值,但是start默认为0,也就是从索引为0开始一直到逆序索引为-2的值

lst = [10,20,30,40,50,60,70]
lst2 = lst[:-2]
print(lst2)

 [10, 20, 30, 40, 50]     从0到-2

   连续切片操作

lst = [10,20,30,40,50,60]
lst_1 = lst[:4][:2]
print(lst_1)

  相当于lst[:4]=[10,20,30,40]

            lst[:4][:2]=[10,20]

 切片操作的三个参数可以用表达式

lst = [10,20,30,40,50,60]
lst_1 = lst[1*1:3+3][0:5%2]
print(lst_1)

理论上可以无限次连续切片操作,只要上一次返回的依然是非空可切对象

其他对象的切片操作

(1)元组的切片

a = (1,2,3,4,5,6)[:3]    #元组切片操作
print(a)

 (1, 2, 3)  取前三个

(2)字符串的切片操作

b = 'ASBJFS'[:3]
print(b)

 ASB   取前三个字符

(3)切片应用

用range函数生成1-20的整数,取3的倍数并输出后四位

for i in range(1,20)[2::3][-4:]:
    print(i,end='  ')

 9  12  15  18 

3、判断指定元素在列表中是否存在

语法格式:

元素  in/not in 列表名

lst_4 = [10,20,30,40]
print(10 in lst_4)        #True
print(20 not in lst_4)    #False

4、列表元素的遍历

lst_5 = [10,20,30]
for item in lst_5:    #从lst_5中依次取值赋给item并打印输出
    print(item)

10
20
30

四、列表增加元素操作

列表增加元素的方法:

1、append():在列表的末尾添加一个元素

lst = [10,20,30]
lst.append(100)
print(lst)         #[10, 20, 30, 100],增加后id值没有改变

2、extend():  在列表的末尾至少添加一个元素

lst = [10,20,30]
lst2 = [60,70,80]
lst.append(lst2)      #添加一个元素,将lst2整个作为一个元素插入在末尾
print(lst)
lst.extend(lst2)
print(lst)              #将lst2的所有元素依次插入到lst

[10, 20, 30, [60, 70, 80]]
[10, 20, 30, [60, 70, 80], 60, 70, 80]

         可以看到append()是直接将lst2整个列表作为一个元素插入lst,而extend()是将lst2中的所有元素依次插入lst中。

3、insert():  在列表任意位置添加一个元素

lst.insert(2,100)       #在索引为2的位置插入100
print(lst)

4、切片:  在列表任意位置至少添加一个元素

lst3 = ['ds',22,80]
lst[1:] = lst3          
#从索引为1的位置,没有设置stop默认到最后一个元素,因此从索引为1开始都切除,并插入lst3
print(lst)

 [10, 'ds', 22, 80]

        若在一个索引位置上插入多个元素只需要设置 lst = [2:2] ,起始索引和终止索引在同一个位置

lst3 = ['ds',22,80]
lst[1:1] = lst3          #设置起始索引与终止索引相同,在该索引位置插入新的元素
print(lst)

[10, 'ds', 22, 80, 20, 30]

五、列表的删除操作

1、remove():  一次删除一个元素,重复元素只删除第一个,元素不存在则抛出异常

lst = [10,20,30,40,50,30]
lst.remove(30)         第一个30被删除
print(lst)

[10, 20, 40, 50, 30] 

2、pop():  删除一个指定索引位置上的元素

lst.pop(1)             索引为一被移除
print(lst)
lst.pop()              默认删除最后一个元素
print(lst)

 [10, 40, 50, 30]
[10, 40, 50]

3、切片:  一次至少删除一个元素

lst2 = [10,20,30,40,50]
new_lst = lst2[1:3]
print(new_lst)             至少删除一个元素,会产生一个新的列表对象

不产生新的列表对象,而是删除原列表中的内容

lst2[1:3] = []
print(lst)

 [10, 40, 50]

4、clear():清空列表

lst2.clear()    得到一个空列表
print(lst2)

5、del:  删除列表 

del  lst2

 六、列表修改操作

列表元素的修改操作

1、为指定索引的元素赋予一个新值

#一次修改一个值
lst = [10,20,30,40,50]
lst[2] = 200
print(lst)

2、为指定的切片赋予一个新值

#切片替换,索引从1-2替换成[100,200,300,400]
lst[1:3] = [100,200,300,400]
print(lst)

七、列表的排序操作

1、sort()方法

调用sort()函数,列表中的所有元素默认按从小到大的顺序进行排序,可以指定reverse=True,进行降序排序,不产生新的列表对象,在原有的列表中进行排序。

lst = [50,58,96,23,98,11]
lst.sort()
print(lst)

#逆序排序
lst.sort(reverse=True)     #reversr=False升序排序
print(lst)

[11, 23, 50, 58, 96, 98]
[98, 96, 58, 50, 23, 11]

2、sorted()函数

调用内置函数sorted(),可以指定reverse=True,进行降序排序,原列表不发生改变,生成新的列表对象。

lst1 = [10,80,99,57,48,56]
new_list = sorted(lst1)
print(lst1)
print(new_list)

#逆序排序
lst2 = sorted(lst1,reverse=True)
print(lst2)

八、总结

1、列表查询方法 

        index(data,start,stop)

2、列表增加元素的方法

        append(data):  在列表的末尾添加一个元素

        extend(data):  在列表末尾至少添加一个元素

        insert(索引位置,data):  在列表的任意位置添加一个元素

        切片:  在列表任意位置至少添加一个元素,相当于替换

3、列表元素删除的方法

        remove(data):  一次删除一个元素,重复元素只删除第一个,元素不存在抛出异常

        pop(索引位置):  删除指定索引位置上的元素,不指定默认最后一个

        切片:  一次至少删除一个元素,若不想产生新的序列,则用一个空列表做替换

        clear():  清空列表

        del:  删除列表   del list


九、多功能的切片

切片可以实现列表增加元素的方法

lst3 = ['ds',22,80]  将lst中从索引为1开始全部替换成lst3
lst[1:] = lst3         
print(lst)

如果设置stop值则可以实现列表的修改,相当于替换

lst[1:3] = [100,200,300,400]
print(lst)

还可以实现列表元素的删除操作,但会产生一个新的列表

lst2 = [10,20,30,40,50]
new_lst = lst2[1:3]
print(new_lst)

如果想不产生新的列表,仍然在原列表操作,只需用一个空列表替换

lst2[1:3] = []
print(lst)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值