Python第二周总结:常用数据结构
文章目录
列表
列表的定义
列表是由一系元素按特定顺序构成的数据序列,这样就意味着定义一个列表类型的变量,可以保存多个数据,而且允许有重复的数据。
列表是容器型数据类型(用一个变量可以保存多个数据),是可变数据类型
列表用[]
来定义,列表的数据项不需要具有相同的类型:
list1 = [35, 12, 97, 55, 68, 73, 49, 92, 20]
list2 = ['210502', '悾格', True, 20, '1999-12-31']
list3 = ['A', 'a', 'B', 'b', 'C']
# 查看变量的数据类型
print(type(list2)) # <class 'list'>
print(type(list2[1])) # <class 'str'>
print(type(list2[2])) # <class 'bool'>
print(type(list2[3])) # <class 'int'>
列表的创建
创建列表可以从三个方面来创建:
1. 字面量语法
2. 构造器语法
- 通过Python内置的`list`函数将其他序列变成列表。准确的说,`list`并不是一个函数,而是创建列表对象的构造器
3. 生成式(推导式)语法
# 创建列表
# 方式一:字面量语法
list1 = ['apple', 'orange', 'pitaya', 'durian']
print(list1) # ['apple', 'orange', 'pitaya', 'durian']
# 方式二:构造器语法
list2 = list(range(1, 10)) # 创建一个1-9的列表
print(list2) # [1, 2, 3, 4, 5, 6, 7, 8, 9]
# 方式三:生成式(推导式)语法
list3 = [i ** 2 for i in range(1, 10)] # 创建一个1-9平方的列表
print(list3) # [1, 4, 9, 16, 25, 36, 49, 64, 81]
列表的运算
# 定义2个列表
list1 = [76, 83, 91, 97]
list2 = [61, 26]
# 列表的拼接(赋值给原有的列表并更新该列表或赋值给新的列表)
list3 = list1 + list2
print(list3) # [76, 83, 91, 97, 61, 26]
# 列表的重复
list4 = ['Hi'] * 3
print(list4) # ['Hi', 'Hi', 'Hi']
# 列表的成员运算(查看某个元素是否存在于该列表)
print(100 in list3) # False
print('Hello' not in list4) # True
# 获取列表的长度(元素个数)
print(len(list3)) # 6
# 列表的索引
print(list3[0], list3[-6]) # 76 76
# 同时可以通过索引来改变指定下标元素的值
list3[5] = 100 # 修改下标为5的元素的值
print(list3) # [76, 83, 91, 97, 61, 100]
'''
列表的切片(格式:list3[start:end:step])
start:列表切片初识位置,默认为0
end:列表切片终止位置,默认为列表的最后元素下标
step:步长,切片元素截取的间隔长度,值为负数时,反向切片
'''
print(list3[:5]) # [76, 83, 91, 97, 61]
print(list3[4:]) # [61, 100]
print(list3[-3:-6:-1]) # [97, 91, 83]
print(list3[::-2]) # [100, 97, 83]
# 列表的比较运算
list5 = [1, 2, 3, 4]
list6 = list(range(1, 5))
# 两个列表比较相等性比的是对应索引位置上的元素是否相等
print(list5 == list6) # True
list7 = [3, 2, 1]
# 两个列表比较大小比的是对应索引位置上的元素的大小
print(list5 <= list7) # True
由于列表是可变类型,所以通过索引操作既可以获取列表中的元素,也可以更新列表中的元素。对列表做索引操作一样要注意索引越界的问题,对于有N
个元素的列表,正向索引的范围是0
到N-1
,负向索引的范围是-1
到-N
,如果超出这个范围,将引发IndexError
异常,错误信息为:list index out of range
。
列表的遍历
num = [35, 98, 12, 27, 66]
# 对列表进行读操作的for循环,无序号
for x in num:
print(x)
# 有序号,先通过enumerate函数对列表进行预处理
# 循环遍历的时候既可以获取到索引(下标)又可以获取到元素
for i, x in enumerate(num):
print(i, x)
列表的方法
# 添加和删除元素
list1 = [12, 23, 34]
# 添加元素(append())
list1.append(45)
print(list1) # [12, 23, 34, 45]
# 在指定位置添加元素(insert())
list1.insert(2, 56)
print(list1) # [12, 23, 56, 34, 45]
# 删除指定元素(remove())
list1.remove(12)
print(list1) # [23, 56, 34, 45]
# 删除列表最后一个元素(pop()默认删除最后一个元素)
list1.pop()
print(list1) # [23, 56, 34]
# pop()也可以删除指定索引位置的元素
list1.pop(1)
print(list1) # [23, 34]
# 清空列表中的元素
list1.clear()
print(list1) # []
列表的位置和统计
列表类型的index
方法可以查找某个元素在列表中的索引位置;因为列表中允许有重复的元素,所以列表类型提供了count
方法来统计一个元素在列表中出现的次数。
list1 = [12, 23, 34, 45, 56, 12]
# 查询元素的索引位置(index())
print(list1.index(12)) # 0
# 若需要查询的元素有2个时,需要从第一个该元素的后一位下标开始查找
print(list1.index(12, 1)) # 5
# 统计元素出现的次数
print(list1.count(12)) # 2
print(list1.count(34)) # 1
print(list1.count(78)) # 0
排序和反转
list1 = ['banana', 'grape', 'apple', 'waxberry', 'pitaya', 'apple']