列表相当于其他语言中的数组
列表中可以存储多个不同的数据类型
列表的创建方式:
①使用中括号[]
②调用内置函数list()
lst = ['hello', 'world', 98]
lst2 = list(['hello', 'world', 98])
print(lst)
print(lst2)
print(lst[1]) # world
print(lst[-2]) # world
列表的特点:
①列表元素按顺序有序排列
索引从左到右是从0开始,从右向左是从-1开始
②索引映射唯一一个数据
③列表可以存储重复数据
④任意数据类型混存
⑤根据需要动态分配内存和回收内存
列表的查询操作
1、获取列表中指定元素的索引
函数:index()
如果被查列表中存在多个相同元素,只返回相同元素中的第一个元素的索引
如果查询的元素在列表中不存在,则会抛出ValueError
可以在指定的start和stop之间进行查找
2、获取列表中的单个元素
正向索引从0到N-1;逆向索引从-N到-1;指定索引不存在,抛出indexError
lst = ['hello', 'world', 98, 'hello']
print(lst.index('hello')) # 0
# print(lst.index('hey')) # ValueError
print(lst.index('hello', 1, 3)) # ValueError 因为’hello‘的索引是0、4,所以1到2中找不到没有’hello‘
lst = ['hello', 'world', 98, 'hello', 'world', 234]
print(lst[2]) # 98
print(lst[-3]) # hello
print(lst[10]) # IndexError: list index out of range
3、获取列表中的多个元素
切片操作
语法格式 列表名[start : stop : step]
切片的结果:原列表片段的拷贝
切片的范围:[start,stop),左开右闭,不包括stop
step默认为1,简写为[start : stop]
# step为正数,从start开始往后计算切片:
# ①[ : stop : step],切片的第一个元素默认是列表的第一个元素
# ②[start : : step ],切片的最后一个元素默认是列表的最后一个元素
# step为复数,从start开始往前计算切片
# ①[: stop : step],切片的第一个元素默认是列表的最后一个元素
# ②[start : : step],切片的最后一个元素默认是列表的第一个元素
lst = [10, 20, 30, 40, 50, 60, 70, 80]
print('原列表的id:', id(lst))
lst2 = lst[1:6:1]
print('切的片段的id:', id(lst2)) # id(lst2) != id(lst),即切出来的片段是一个新的列表
4、判断指定的元素在列表中是否存在
in、not in
lst = [10, 20, 'python', 'hello']
print(10 in lst) # True
print(100 in lst) # False
print(10 not in lst) # False
print(100 not in lst) # True
5、列表中元素的遍历
lst = [10, 20, 'python', 'hello']
for item in lst:
print(item)
6、列表元素的增、删、改操作
列表元素的增加操作:
append() 在列表的末尾添加一个操作
# 在列表的末尾添加一个元素
lst = [10, 20, 30]
print('添加元素之前的列表及其id:', lst, id(lst))
lst.append(100)
print('添加元素之后的列表及其id:', lst, id(lst))
# 从输出可以看出,添加元素之后,列表的id不会改变
extend() 在列表的末尾添加至少一个元素
# 在列表的末尾添加一个元素
lst = [10, 20, 30]
print(lst)
lst2 = ['hello', 'world']
# lst.append(lst2) # 将lst2作为一个元素添加到列表的末尾
# print(lst) # [10, 20, 30, 100, ['hello', 'world']]
lst.extend(lst2) # 向列表lst的末尾一次性添加多个元素
print(lst) # [10, 20, 30, 'hello', 'world']
insert() 在列表的任意位置添加一个元素
# 在任意位置上添加一个元素
lst = [10, 20, 30]
print(lst)
lst.insert(1, 90) # 在索引为1的位置添加元素90
print(lst) # [10, 90, 20, 30]
切片,在列表的任意位置添加至少一个元素
# 在列表的任意位置添加至少一个元素
lst = [10, 20, 30]
print(lst, id(lst))
lst3 = [True, False, 'hello']
lst[1:] = lst3 # 从指定位置开始用lst3中的元素替换原列表的中的元素
print(lst, id(lst)) # [10, True, False, 'hello']
# 这里切片不会产生新的列表对象
列表元素的删除操作
remove() 一次删除一个元素、重复元素只删除第一个、元素不存在时抛出ValueError
# 从列表中移除一个元素
lst = [10, 20, 30, 40, 50, 60, 30]
lst.remove(30)
print(lst) # [10, 20, 40, 50, 60, 30
pop() 删除一个指定索引位置上的元素、指定索引不存在抛出IndexError、不指定索引时删除列表最后一个元素
# 根据索引从列表中移除一个元素
lst = [10, 20, 30, 40, 50, 60, 30]
lst.pop(1)
print(lst) # [10, 30, 40, 50, 60, 30]
切片
lst = [10, 20, 30, 40, 50, 60]
print(lst, id(lst)) # [10, 20, 30, 40, 50, 60] 2632700044992
new_list = lst[1:3]
print(new_list, id(new_list)) # [20, 30] 2632700031680
# 切片操作产生一个新的列表对象,与原列表id不同
# 用空元素替代指定位置处的元素,不产生新的列表
lst[1:4] = []
print(lst, id(lst)) # [10, 50, 60] 2632700044992
clear()清空列表
del 删除列表对象
# 清空列表中的所有元素
lst = [10, 20, 30, 40, 50]
print(lst) # [10, 20, 30, 40, 50]
lst.clear() # 注意clear后有个()
print(lst) # []
# 删除整个列表对象
lst = [10, 20, 30, 40, 50]
print(lst) # [10, 20, 30, 40, 50]
del lst
print(lst) # NameError: name 'lst' is not defined. Did you mean: 'list'?
列表元素的修改操作
为指定索引的元素赋予一个新值
为指定的切片赋予一个新值
# 一次修改一个值
lst = [10, 20, 30, 40, 50]
print(lst) # [10, 20, 30, 40, 50]
lst[2] = 100
print(lst) # [10, 20, 100, 40, 50]
# 为指定的切片赋予一个新值
lst[1:3] = [300, 400, 500, 600]
print(lst) # [10, 300, 400, 500, 600, 40, 50]
列表元素的排序操作
常见的两种方式:
①调用sort(),列表中所有元素默认按照从小到大(升序)的顺序进行排序,可以指定reverse=True, 进行降序 排序
②调用内置函数sorted(),可以指定reverse=True,进行降序 排序,原列表不发生改变
lst = [20, 40, 10, 90, 60]
print('排序前的列表', lst, id(lst)) # 排序前的列表 [20, 40, 10, 90, 60] 2709493622464
lst.sort()
print('排序后的列表', lst, id(lst)) # 排序后的列表 [10, 20, 40, 60, 90] 2709493622464
# 排序前后,列表的id不发生变化
# 降序排序
lst.sort(reverse=True)
print(lst) # [90, 60, 40, 20, 10]
注意:注意sort()和内置函数sorted()使用方法上的差异
lst = [20, 40, 10, 90, 60]
print('排序前的列表', lst, id(lst)) # 排序前的列表 [20, 40, 10, 90, 60] 2162580367040
new_list = sorted(lst)
print(new_list, id(new_list)) # [10, 20, 40, 60, 90] 2162580353728
# 使用内置函数会产生一个新的列表对象
desc_list = sorted(lst, reverse=True)
print('降序后的列表', desc_list, id(desc_list)) # 降序后的列表 [90, 60, 40, 20, 10] 2162580352896
列表生成式
即生成列表的公式
# 语法格式: [i*i for i in range(1,10)] 其中i是自定义变量,i*i是表示列表元素的表达式
# 注意:“表示列表元素的表达式”中通常包含自定义变量
lst = [i for i in range(1, 10)]
print(lst) # [1, 2, 3, 4, 5, 6, 7, 8, 9]
lst2 = [i*i for i in range(1, 10)]
print(lst2) # [1, 4, 9, 16, 25, 36, 49, 64, 81]