第五章:Python基本数据结构——列表

序列是 Python 中最基本的数据结构。

序列中的每个值都有对应的位置值,称之为索引,第一个索引是 0,第二个索引是 1,依此类推。

Python 有 6 个序列的内置类型,但最常见的是列表和元组。

列表都可以进行的操作包括索引,切片,加,乘,检查成员。

此外,Python 已经内置确定序列的长度以及确定最大和最小的元素的方法。

列表是最常用的 Python 数据类型,它可以作为一个方括号内的逗号分隔值出现。

列表的数据项不需要具有相同的类型

一、列表的创建

  • 什么是列表

    • 序列是 Python 中最基本的数据结构
  • 为什么需要列表

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

  • 列表的特点

    • 列表元素按顺序有序排列
    • 索引映射唯一一个数据
    • 列表可以存储重复数据
    • 任意数据类型混存
    • 根据需要动态分配和回收内存
  • 列表示意图

    • 正向索引

    image-20220711222653856

    • 反向索引

    image-20220711222807137

  • 列表创建

    创建一个列表,只要把逗号分隔的不同的数据项使用方括号括起来即可

    • 使用中括号
    • 调用内置函数list()
  • 代码演示

list = ["hello", "Python", "World"]
print(id(list))
print(type(list))
print(list)

list2=list(["hello",87,"YWHh"])
print(list2)

二、列表的查询操作

2.1 获取列表中指定元素的索引

  • 知道列表中存在N个相同元素,只返回相同元素中的第一个元素
  • 如果查询的元素在列表中不存在,则会抛出ValueError
  • 还可以在指定的start和stop之间进行查询
lst = ["hello", "world", 98, "hello"]
# 如果列表中有相同元素,只返回列表中的第一个元素
print(lst.index("hello"))
# print(lst.index("1111"))  元素不存在
# 指定范围查找
print(lst.index("hello", 1, 4))

2.2 获取列表中的单个元素

  • 正向索引从0到N-1
  • 逆向索引从-N到-1
  • 指定索引不存在,抛出IndexError
lst = ["hello", "world", 98, "hello"]
# 正向索引:获取索引为2的元素
print(lst[2])
# 逆向索引:获取索引为-2的元素
print(lst[-2])
# 索引不存在
# print(lst[-99])

2.3 获取列表中的多个元素

  • 语法格式
列表名[start :	stop : step ]
  • 切片操作
切片操作写法解释
切片的结果原列表片段的拷贝
切片的范围[ start , stop ]左闭右开
步长step默认为1[ start : stop ]或者[ start : stop : ]
step为数时,从start开始往后[ : stop : step]切片的第一个元素默认时列表的第一个元素
[ start : : step]切片的最后一个元素默认时列表的最后一个元素
step为数时,从start开始往前[ : stop : step]切片的第一个元素默认时列表的最后一个元素
[ start : : step]切片的最后一个元素默认时列表的第一个元素
  • 代码演示
# 切片操作
lst = [10, 20, 30, 40, 50, 60, 70, 80]
# 打印输出:start=1,stop=6,step=1,产生新列表
print(lst[1:6:1])
print("原列表",id(lst))
print("切列表",id(lst[1:6:1]))
# 默认步长为1
print(lst[1:6])
print(lst[1:6:])
# 正向切片
print(lst[:6:2])
print(lst[1::2])
# 逆向切片
lst = [10, 20, 30, 40, 50, 60, 70, 80]
print(lst[::-1])
print(lst[6:1:-1])
print(lst[:1:-1])
print(lst[6::-1])

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

  • 语法格式
元素	in	列表名
元素	not in	列表名
  • 代码演示
lst = [10, 20, "Python", "Hello"]
print(10 in lst)
print(100 in lst)
print("Hello" in lst)
print("java" in lst)

2.5 列表元素的遍历

  • 语法格式
for 迭代变量	in	列表名	:
	操作
  • 代码演示
lst = [10, 20, "Python", "Hello"]
# 将列表元素依次输出
for i in lst:
    print(i)

三、列表元素的增加操作

  • 增加操作方法
方法/其他操作描述
append()在列表的末尾添加一个元素,不生产新的对象
extend()在列表的末尾至少添加一个元素
insert()在列表中的任意位置添加一个元素
切片在列表中的任意位置添加至少一个元素
  • 代码演示
# append():向列表的末尾添加一个元素—最常用
lst = [10, 20, 30]
print("添加元素之前:", id(lst), lst)
lst.append(100)
print("添加元素之后:", id(lst), lst)

lst2 = ["hello", "world"]
# 将lst2作为一个元素添加到列表的末尾
lst.append(lst2)
print(lst)
# 将lst2元素依次添加到列表末尾
lst.extend(lst2)
print(lst)

# 在任意位置上添加一个元素
lst.insert(1, 90)
print(lst)

lst3 = [30, 40, "hello", "python"]
# 切片:在任意位置上添加N多个元素
lst[1::]=lst3
print(lst)

四、列表元素的删除操作

  • 增加操作方法
方法/其他操作描述
remove()从列表中移除一个元素,如果有重复元素,只移除第一个;列表元素不存在,ValueError抛出异常
pop()根据索引移除元素;若索引不存在,则抛出IndexError异常
切片删除至少一个元素,将会产生一个新的列表对象
clear()清空列表
del删除列表
  • 代码演示
lst = [10, 20, 30, 40, 50, 60, 30]
print("原列表:", lst)
# remove():从列表中移除一个元素,如果有重复元素,只移除第一个
lst.remove(30)
print("原列表:", lst)
# 列表元素不存在,ValueError抛出异常
# lst.remove(100)

# pop():根据索引删除元素
lst.pop(2)
print(lst)
# 如果指定的索引位置不存在,将抛出IndexError异常
# lst.pop(50)
# 不写参数,会将列表中的最后一个元素删除
lst.pop()
print(lst)

# 切片:删除至少一个元素,将会产生一个新的列表对象
new_list = lst[1:3]
print("原列表:", id(lst), lst)
print("新列表:", id(new_list), new_list)
# 不产生新的列表对象,而是删除原列表中的内容
lst[1:3] = []
print(lst)

# clear():清除列表中的所有元素
lst.clear()
print(lst)

# del语句:删除列表
del lst

五、列表元素的修改操作

  • 为指定索引的元素赋予一个新值
  • 为指定的切片赋予一个新值
  • 代码演示
list = [10, 20, 30, 40]
# 一次修改一个值
list[2] = 100
print(list)  # [10, 20, 100, 40]
# 切片修改
list[1:3:] = [22, 33]
print(list)

六、列表元素的排序操作

  • 排序操作方法
方法/其他操作描述
sort()调用sort()方法,列表中的所有元素默认按照从小到大的顺序排序,
可以通过指定 reverse=True,进行降序排序,对原列表操作,不产生新的列表对象
sorted()调用内置函数sorted(),
可以通过指定 reserve=True,进行降序排序,原列表不发生改变,产生新的列表对象
  • 代码演示
lst = [20, 40, 10, 98, 54]
print('排序前列表', lst)  # 排序前列表 [20, 40, 10, 98, 54]
# 开始排序,调用列表对象的sort方法,默认是升序
lst.sort()
print('排序后列表', lst)  # 排序后列表 [10, 20, 40, 54, 98]
lst.sort(reverse=True)
print('新排序列表', lst)  # 新排序列表 [98, 54, 40, 20, 10]
lst.sort(reverse=False)
print('新排序列表', lst)  # 新排序列表 [10, 20, 40, 54, 98]

# 使用内置函数sorted()对列表进行排序,将产生一个新的列表对象
lst2 = sorted(lst)
print(lst2)  # [10, 20, 40, 54, 98]
lst2 = sorted(lst, reverse=True)
print(lst2)  # [98, 54, 40, 20, 10]

七、列表生成式

列表生成式,简称“生成列表的公式“

  • 语法结构
[ 表示列表元素的表达式 for 自定义变量 in 可迭代对象 ]
[ i*i for i in range(1,10) ]
  • 代码演示
lst = [i for i in range(1, 10)]
print(lst)
lst2 = [i * i for i in range(1, 10)]
print(lst2)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

巧克力配酸奶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值