目录
为什么需要列表?
变量可以存储一个元素,而列表是一个“大容器”可以存储N多个元素,程序可以方便地对这些数据进行整体操作
列表相当于其他语言中的数组
一、列表对象的创建
列表需要使用[ ],元素之间使用逗号进行分隔,例如:
lst = ['大圣',‘孙悟空’]
列表的创建方式:
- 使用中括号
- 使用内置函数list()
案例:
# 第一种,使用lst
lst = ['hello', 'word', 'this is list.']
print(lst)
print(type(lst))
print(id(lst))
# 第二种,使用内置函数list
lst1 = list(['hello', 'word', 'this is list'])
print(lst1)
print(type(lst1))
print(id(lst1))
运行结果:
二、列表的特点
-
列表元素按顺序有序排序
-
索引映射唯一一个数据
-
列表可以存储重复数据
-
任意数据类型可以混存
-
根据需要动态分配和回收内存
案例:
lst = ['hellow', 'word', '121', '789', '121'] # 列表数据可重复
print(lst)
print(lst[0])
print(lst[2])
print(lst[-1])
lst1 = list(['hellow', 'word', '789', '123', '123'])
print(lst1)
print(lst1[0])
print(lst1[-1])
运行结果:
三、查询列表中的元素
(1)获取指定元素的索引
通多index()函数去获取
- 如查列表中存在N个相同元素,只会返回相同元素中的第一个元素的索引
- 如查询的元素在列表中不存在,运行结果则会出现ValueError
- 还可以在指定的start和stop之间进行查找
案例:
# index的使用中需要注意,使用的是“.”而不是“,”,否则容易报错
lst = ['hello', 'word', '999', 'hello']
print(lst.index('hello')) # 如果说列表中有相同的元素,那么其只会返回列表中的第一个元素
# print(lst.index('box')) # 查找列表中所不存在的元素时,会出现报错的情况
# print(lst.index('hello',1,3)) # 查找该元素时给定了指定的范围,依旧会报错,是因为在这个范围内是没有这个元素的
print(lst.index('hello', 1, 4)) # 此为正确的表示
运行结果:
(2)获取列表中指定的元素
获取列表中的单个元素
- 正向索引从0到N-1,例如:lst[0]
- 逆向索引从-N到-1,例如:lst[-N]
- 指定索引不存在,运行结果则会出现IndexError
案例:
# index可以用来获取索引数,反之则可以利用索引数去获取相应的元素
# 当索引的元素不在这个范围内则会出现报错
lst1 = ['hello', 'word', 'cat', 89, 'dog', 578]
print(lst1[4])
print(lst1[-3])
运行结果:
(3)获取列表中的多个元素_切片操作
当进行多个元素获取时,采用的是切片操作
语法格式:
列表名[start:stop:step]
其中采用的是[ ),即左闭右开的格式范围,step是步长
案例:
lst = [12, 23, 24, 25, 78, 34, 79, 90]
# 现在想要获取start=1,stop=5,step=1
print(lst[1:5:1])
lst1 = lst[1:5:1]
print('原切片:', id(lst))
print('切的片段:', id(lst1))
# 现在想要获取一个没有初始值的,即start=,stop=6,step=2
print(lst[:6:2])
# 现在获取一个没有stop值的数据,即start=1,stop=,step=3
print(lst[1::3])
print(lst[0::3])
# 现在想要获取一个没有step值的,即star=1,stop=6,step=
print(lst[1:6:])
# 现在获取一个没有初始值和起始值的一组结果
print(lst[::1]) # 结果表明,初始值和起始值没有要求时,直接采用默认的方式
print('---------step为负数时--------')
# 出现step为负数的情况时,原列表会逆序输出
print('原列表:', lst)
# print(lst[::-1])
print('step为负数时:', lst[::-1])
# 当stat=7,stop=2,step=-1
print(lst[6:2:-1]) # 可以理解为相反方向
print(lst[7::-2])
运行结果:
(4)列表元素的判断
利用in和not in判断元素是否在列表中
案例:
# 判断字符串
print('i' in 'list')
print('m' not in 'list')
# 判断元素是否在列表中
lst = [12, 23, 44, 32, 55, 65, 34, 43]
print(12 in lst)
print(23 not in lst)
运行结果:
(5)列表元素的遍历
用for in 去遍历列表元素
案例:
lst = [12, 23, 44, 32, 55, 65]
for item in lst:
print(item)
运行结果:
四、列表元素的增、删、改操作
(1)列表元素的添加
- append(),在列表末尾添加一个元素
- extend(),在列表的末尾至少添加一个元素
- Insert(),在列表的任意位置添加一个元素
- 切片,在列表的任意位置至少添加一个元素
案例:
print('-------append()---------') # 表明增加元素前和增加元素后标识不发生改变
lst = [10, 20, 30, 40]
print('增加元素前:', lst, id(lst))
lst.append(13)
print('增加元素后:', lst, id(lst))
print('-------extend()---------') # 增加元素时,相当于是再引用进去一个列表
lst1 = [100, 210, 320]
print('增加元素前:', lst, id(lst))
lst.extend(lst1)
print('增加元素后:', lst, id(lst))
print('--------insert()--------') # 增加元素时在任意位置
lst.insert(1, 90) # 增加元素时,在索引为1的位置开始增加元素
print('增加元素后:', lst)
print('---------切片-----------') # 切片相当于是切掉
lst2 = [15, 19, 21, 35]
lst[2:] = lst2 # 表明索引为后边的元素被切掉了,增加了一个新的列表
print(lst)
运行结果:
(2)列表元素的删除
- remove(),一次删除一个元素,重复元素只删除第一个,元素不存在时,运行结果则会出现ValueError。
- pop(),删除指定一个索引位置上的元素,指定索引不存在,运行结果则会出现IndexError。不指定索引,删除列表中最后一个元素。
- 切片,一次至少删除一个元素。
- clear(),清空列表。
- del,删除列表
案例:
print('-------remove()---------')
lst = [5, 10, 15, 20, 25, 30, 35, 40, 45, 50]
lst.remove(10) # 表明删除10这个元素
print(lst)
print('---------pop()----------')
lst.pop(1)
print(lst) # 表明删除索引位置为1的元素、
print('----------切片-----------')
new_lst = lst[1:4] # 切片操作至少删除一个元素,产生一个新的列表
print('原列表:', lst)
print('切片以后的列表', new_lst)
lst[0:2] = [] # 不产生新的列表对象,而是删除原列表中的对象
print(lst)
print('---------clear()---------') # 清空列表中的所有元素
lst.clear()
print(lst)
print('------------del()---------')
del lst # 删除列表
# print(lst) # 此时的列表不存在,所以会出现报错的情况
运行结果:
(3)列表元素的修改
- 为指定索引的元素赋予一个新值
- 为指定的切片赋予一个新值
案例:
lst = [10, 20, 30, 40, 50]
print('原列表:', lst)
# 只进行单个元素的修改
lst[2] = 300
print('修改一个元素:', lst)
# 修改多个元素,修改多个元素时,可利用索引和步长
lst[1:3] = [12, 13, 14, 15]
print('修改多个元素:', lst)
运行结果:
五、列表元素的排序
对列表进行排序,常见的有两种操作 :
1.sort()函数,sort()函数是升序操作 lst.sort(reverse=True)是降序操作 lst.sort(reverse=False)是升序操作
2.设置内置函数进行操作,sorted(),可以对列表进行操作,此时的是升序,会产生一个新的列表对象 ,也可以利用关键字进行排序
这两种方法的区别是:
第一种是在原列表的基础上进行改变,不会产生新的列表对象,而第二种是会产生新的列表对象
案例:
lst = [13, 15, 18, 89, 43, 10]
print('原列表:', lst)
print('--------sort()函数----------')
lst.sort() # 对列表进行升序
print(lst)
print('------sort(reverse=True)----')
lst.sort(reverse=True) # 对其进行降序排序
print(lst)
lst.sort(reverse=False)
print(lst) # 对其进行升序排序
print('设置内置函数sorted(),对列表进行排序,产生一个新的列表对象')
print('原列表:', lst, id(lst))
new_lst = sorted(lst) # 对列表进行升序排序
print('升序后的列表:', new_lst, id(new_lst))
# 指定关键字,也可以改变升序和降序
desc_lst = sorted(lst, reverse=True) # 降序
print(desc_lst)
incr_lst = sorted(lst, reverse=False) # 升序
print(incr_lst)
运行结果:
六、列表生成式
列表生成式即生成列表的公式
语法格式:
[ i*i for i in range(1,10) ]
[列表元素的表达式 for 自定义变量 in range(x,y) ]
注意事项:
“表示列表元素的表达式”中通常包含自定义变量
案例:
lst = [i for i in range(1, 10)]
print(lst)
lst1 = [i*i for i in range(1, 10)]
print(lst1)
lst2 = [i*2 for i in range(1, 11)]
print(lst2)
运行结果: