数据结构是以某种方式组合起来的数据元素集合,在Python中最基本的数据结构为序列。
List列表
容器型数据类型: 同时保存多个数据的数据。常见的容器型数据类型:列表、元组、字典、集合、迭代器、生成器、字符串。
什么是列表
列表是容器型数据类型,将[]作为列表的标志,里面中的各个数据(元素)用逗号隔开。例:[1,2,3]
列表是可变的(列表中的元素的个数和值可变)、有序的、可以存入任何类型的数据。
he = []
print([])
l = [1, 'str', 1, 1, [3, 2, 's']]
print(l)
"""
[]
[1, 'str', 1, 1, [3, 2, 's']]
"""
获取列表元素
下标获取
- 语法:列表[下标]
- 说明:
- 列表 - 任何结果的是列表的表达式:独立的列表数据、保存列表的变量、返回值是列表的函数调用表达式、结果是列表的运算符表达式。
- [] - 固定写法
- 下标 - 即索引,是用来表示有序序列中元素的位置(顺序)。
- 列表中的每个元素都有一个唯一并且固定的下标,用来表示这个元素在列表中的位置,下标值的范围是从0开始依次增加,其中0表示第一个元素。
- 列表中的每一个元素有两种下标值,一种是正的下标值(从0开始),另一种是负的下标值(从-1开始,依次减小,-1表示最后一个元素)。
切片
-
语法:列表[开始下标:结束下标:步长]
-
说明:
-
开始下标、结束下标 - 下标值,整数
-
步长 - 整数
- 步长为正,表示获取元素下标在开始下标到结束下标范围从左往右取值;应保证开始下标对应的位置在结束下标对应的元素的前面,否则前排切片的结果为[]。
- 步长为负,表示获取元素下标在开始下标到结束下标范围从右往左取值;保证开始下标的元素在结束下标对应的元素后面,否则切片的结果是[]。
# 切片获取元素 names = ['鲁班七号', '亚索', '妖姬', '盲僧', '狗头'] print(names[1:3]) print(names[1:3:2]) print(names[2::]) print(names[-4:3:1]) print(names[::-1]) print(names[-1:1:1]) print(names[4:0:-1]) print(names[2:]) """ ['亚索', '妖姬'] ['亚索'] ['妖姬', '盲僧', '狗头'] ['亚索', '妖姬'] ['狗头', '盲僧', '妖姬', '亚索', '鲁班七号'] [] ['狗头', '盲僧', '妖姬', '亚索'] ['妖姬', '盲僧', '狗头'] """
-
-
切片下标可以越界,不推荐
-
切片语法的省略步长:
-
省略步长:列表[开始下标:结束下标]
-
省略开始下标:列表[:结束下标]
-
省略结束下标:列表[开始下标:]
-
省略开始结束下标:列表[::步长] / 列表[:]
-
遍历列表
-
方法一:直接法
-
for 变量 in 列表:
循环体
-
-
方法二:通过下标间接获取
- for 下标 in 下标对应的数字序列:
列表[下标]
循环体
- for 下标 in 下标对应的数字序列:
列表增删改
增 - 添加元素
- append - 追加
- 列表.append(元素) - 在指定列表的最后添加指定元素。
- 插入 - 插入
- 列表.insert(下标,元素) - 在指定列表指定的下标对应的元素前插入指定的元素。
删 - 删除元素
- del
- del 列表[下标] - 删除列表中指定的下标对应的元素(下标不能越界)。
- remove
- 列表.remove(元素) - 删除列表中指定的元素(如果指定的元素不存在,程序会报错)。
- 如果指定的元素存在多个,只删最前面的一个。
- pop
- 列表.pop() - 取出列表中的最后一个元素,并返回被取出的元素。
- 列表.pop(下标) - 去除列表中对应下标的元素,并返回被取出的元素。
改 - 修改元素
- 列表[下标]=新元素 - 将列表中指定下标元素修改成新的元素
- 列表1[开始下标:结束下标]=列表2 - 将列表1中开始下标到结束下标,替换成列表2中的元素
列表的运算
数学运算: +、*
列表1+列表2 - 产生一个新的列表
列表*n - 列表中的元素重复n次,产生一个新的列表
比较运算
-
比较相等
-
is(相同运算符)的用法:判断的是id(地址)是否相等
-
==(相等运算符):判断的是值是否相等
-
is 和 == 的区别:
-
== 判断是值相等
-
is 判断的是地址是否相等
给不同的变量赋相等的数字或者字符串的时候,赋值之前系统会先检查这个数字和字符串内存中是否已经存在,如果存在会直接返回数据的地址给变量,不存在才会开辟新的内存返回新的地址
-
-
-
大小比较
- 列表1>列表2 - 比较的是两个列表中第一组不相等的元素的大小
相关函数
max(列表) :取出列表中的值,最大的元素
min(列表):取最小的 元素
注意:取列表中元素,要求列表中元素类型必须保持一致,并且支持比较运算
sorted(列表):对列表进行排序,将列表中的元素从小到大,进行排序产生一个新的列表。(不会改变原列表)
sorted(列表,reverse=True) :将列表从大到小排序,产生一个新的列表。
注意:sorted对列表进行排序时,应保证列表元素类型保持一致,并支持比较运算。
sorted、reversed适用所有的序列
reversed(列表) : 将列表中的元素倒序产生一个新的迭代器,但需要转换为相应的容器型类型。如,list(reserved(列表))
sum(列表) :返回列表中所有元素的和。序列中的元素必须全部是数字
list - 类型转换,所有容器型的数据都可以转换成列表。(将容器中的元素全部转换成列表中的元素)
列表相关的方法
列表.clear() :清空原列表
列表.copy() :复制列表中所有的元素,产生新的列表。
列表.copy() == 列表[:] == 列表+[] == 列表*1 (浅拷贝)
列表.count(元素) : 统计指定元素在列表中出现的次数。
列表.extend(序列) :将序列中 定元素添加到列表中(不会产生新的列表,在原列表的基础上添加)
列表.index(元素) :获取指定元素在列表中的下标(正下标),列表中没有指定的元素,会报错。
指定的元素,在列表中有多个,只返回最前面的下标值。
列表.index(元素,开始下标,结束下标) - 查找范围在开始下标到结束下标的范围。(左开右闭)
列表.reverse() : 让列表中的元素倒序(不会产生新的列表)
列表.sort() :给列表中元素排序,从小到大排序。(不会产生新的列表)
列表.sort(reverse=True) : 给列表中元素排序,从大到小。(不会产生新的列表)
列表推导式
-
格式1:
[表达式 for 变量 in 序列]
让变量去序列中取值,每取一个值就创建列表中的一个元素,元素的值就是表达式的值
-
格式2:
[表达式 for 变量 in 序列 if 条件语句]
让变量去序列中取值,每取一个就判断条件语句是否为True,如果为True就创建一个列表,元素的值是表达式的值。
-
格式3:
[表达式 for 变量1 in 序列1 for 变量2 in 序列2 ]
…
什么是元组(tuple)
元组是有序(支持下标操作),不可变的(不支持增删改)、可以存入任何类型的数据的数据容器。
元组可以说是不可变的列表
获取元组中的元素
列表获取元素的方式,元组都支持
列表获取元素的方式,元组都支持
- 下标获取 :元组[下标]
- 切片获取 :元组[开始下标:结束下标:步长]
- 遍历 :for 变量名 in 元组
# 获取元组中的元素
# 列表获取元素的方式,元组都支持
t3 = (3, 2, 1)
# 下标获取
print(t3[1])
# 切片获取
print(t3[0:1])
# 遍历
for i in t3:
print(i)
"""
2
(3,)
3
2
1
"""