目录

1. 序列基本知识
  • 序列概念
  • 序列分类
  • 可变对象
2. 列表
  • 列表修改
  • 列表函数
  • 列表遍历
3. 元组与字典
  • 元组
  • 字典
4. 集合
  • 集合方法
  • 集合运算

课堂笔记

1. 序列基本知识
1.1 序列概念
  • 序列,是Python中最基本的一种数据结构。序列用于保存一组有序的数据,所有的数据在序列当中都有一个唯一的位置(索引)并且序列中的数据会按照添加的顺序来分配索引
  • 数据结构指计算机中数据存储的方式
1.2 序列分类
  • 可变序列(序列中的元素可以改变):例如 列表(list),字典(dict)
  • 不可变序列(序列中的元素不能改变):例如 字符串(str),元组(tuple)
1.3 可变对象
  • Python中,数值类型(int和float)、字符串str、元组tuple都是不可变类型。 ⽽列表list、字典dict、集合set是可变类型
  • 可变对象中都保存了三个数据
  • id(标识)
  • type(类型)
  • value(值)
2. 列表
  • 列表(list) ,python中的一个对象,可用于存储一组有序的对象
# 定义一个列表
# lst = ['P', 'Y', 'T', 'H', 'O', 'N']
# print('修改前:', lst)         # 输出['P', 'Y', 'T', 'H', 'O', 'N']

# 通过索引修改元素
# lst[0] = 'A'                  # 输出['A', 'Y', 'T', 'H', 'O', 'N']

# del 删除元素
# del lst[0]                    # 输出['Y', 'T', 'H', 'O', 'N']

# 通过切片修改元素 [起始:结束:步长],步长默认为1,可为负数,但不能为0
# lst[0:6:2]                    # 输出['P','T','O', 'N']
# lst[0:2] = 'ASDF'             # 输出['A', 'S', 'D', 'F', 'T', 'H', 'O', 'N']

# 给切片赋值,须传递一个序列,且序列长度与被修改序列长度一致
# lst[0:2] = 123                # 报错 TypeError: can only assign an iterable
# lst[::2] = 'A'                # 报错 ValueError: attempt to assign sequence of size 1 to extended slice of size 3
# lst[::2] = 'A' * 3            # 起始与结束省略,默认整个列表,输出['A', 'Y', 'A', 'H', 'A', 'N']

# 切片[0:0]再列表头部插入序列
# lst[0:0] = 'A'                # 输出['A', 'P', 'Y', 'T', 'H', 'O', 'N']

# 切片逆序
# print(lst[::-1])              # 输出['N', 'O', 'H', 'T', 'Y', 'P']
2.2 列表函数
# 定义一个列表
# lst = ['P', 'Y', 'T', 'H', 'O', 'N']

# lst.index('H', 1, 7)		# 获取列表中元素'H'位置,从1开始,到7结束,起始于结束参数可省略
# lst.count('T')			# 获取列表中'T'的个数
# lst.append('Z')			# 向列表最后添加一个元素'Z'
# lst.insert(0, 'A')		# 向列表第0个元素前插入一个元素'A'
# lst.extend('X', 'Y')		# 对列表进行扩展,等同于 lst += ['X', 'Y']
# lst.clear()				# 清空列表
# lst.pop(2)				# 弹出列表中下标为2的元素,并返回
# lst.pop()					# 参数可省略,默认弹出最后一个元素
# remove() 					# 删除指定元素 (如果相同值的元素有多个,只会删除第一个)
# lst.reverse()				# 反转列表,等同于lst[::-1]
# lst.sort(reverse=False)	# 降序排序列表
2.3 列表的遍历
# range(st, ed, step)常用于for循环,st起始位置,ed结束位置,step步长

# 定义一个列表
# lst = ['P', 'Y', 'T', 'H', 'O', 'N']

# 普通for循环遍历 'PYTHON'
for item in range(6):
	print(lst[i], end='')
print()

# 迭代器式遍历 'PYTHON'
for item in lst:
	print(item, end='')
print()

# 获取0-100以内3的倍数
print(list(range(0, 100, 3)))
# 打印 [0, 3, 6, 9, ..., 99]
3. 元组与字典
3.1 元组
  • 元组(tuple),⼀个不可变序列(⼀般当我们希望数据不改变时,我们使⽤元组,其他 情况下基本都⽤列表)
  • 非空元组至少包含一个 逗号(,),一般使用()创建,非空时括号()可省略
  • 元组解包,将元组中每个元素都赋值给一个变量
  • 基本应用
# 非元组
my_tuple = 20
print(my_tuple, type(my_tuple))         # 输出 20 <class 'int'>

# 创建一个元组,包含一个元素
my_tuple = 20,
print(my_tuple, type(my_tuple))         # 输出 (20,) <class 'tuple'>

# 新建一个元组
my_tuple = 20, 30, 40, 50               # 等价于 my_tuple = (20, 30, 40, 50)
print(my_tuple, type(my_tuple))         # 输出 (20, 30, 40, 50) <class 'tuple'>

# 元组解包
a, b, c, d = my_tuple
print(a, b, c, d)                       # 输出 20 30 40 50

# 变量与元素个数不对等的元素解包,加*表示一个列表
*a, b, c = my_tuple
print(a, b, c)                          # 输出 [20, 30] 40 50

# *位置可任意存在,除去非序列变量对应的元素,元组会将剩余元素以列表形式返回
a, *b, c = my_tuple
print(a, b, c)                          # 输出 20 [30, 40] 50

# 元组方法 index(target, start, end), count(target)
my_tuple.index(20, 0, 4)                # 从下标[0, 4)查找元素20
my_tuple.count(20)                      # 统计元素个数
3.2 字典
  • 字典(dict),用键值对(key-value)存储对象的一种数据结构,也称为映射(mapping)
  • 字典中元素都具有唯一名称,字典的值是任意可变对象,而键是任意不可变对象,每一对键值对称为一个项(item)
  • 基本操作
# 创建一个字典
d = {'book':'Python入门到放弃', 'price':55}      # 等价于d = dict(book='Python入门到放弃', price=55)
print(d, type(d))                               # 输出{'book': 'Python入门到放弃', 'price': 55} <class 'dict'>

# 双值子序列
# 双值序列 序列中仅含两个值,形如('a', 5), 'xy', [10, 20]
d = dict([('book', 'Python入门到放弃'), ('price', 55)])
print(d, type(d))                           # {'book': 'Python入门到放弃', 'price': 55} <class 'dict'>

# 根据字典键值获取元素值
print(d['book'])                            # 输出 Python入门到放弃
tmp = 'book'
print(d[tmp])                               # 输出 Python入门到放弃
# print(d['tmp'])                             # KeyError: 'tmp',值不存在,直接报错

# 通过字典对象方法获取值
print(d.get('book'))                        # get(key, default),default可省略
print(d.get('python', '该值不存在'))         # 输出 该值不存在,当获取元素不存在时返回default内容

# 修改字典对象
# 1.通过索引键值修改
d['book'] = 'Java EE 轻量级'
d['price'] = 49.9
print(d, type(d))                           # 输出{'book': 'Java EE 轻量级', 'price': 49.9} <class 'dict'>

# 2.对象方法修改
res = d.setdefault('python', '123')         # 当key存在,则直接返回字典中key的值,否则在字典尾部添加该key-value
print(res, d)                               # 输出 123 {'book': 'Java EE 轻量级', 'price': 49.9, 'python': '123'}
  • 常用方法
# 字典常用方法

# 创建两个字典对象
d = dict(a=1, b=2,c=3)
d1 = dict(d=5, f=7, a=9)
# d.update(d1)                    # 更新后 {'a': 9, 'b': 2, 'c': 3, 'd': 5, 'f': 7},有重复值覆盖,无重复值追加

# d1 = d                          # d与d1指向同一个对象
# del d['a']					  # d与d1相同{'b': 2, 'c': 3}

# res = d.popitem()               # 删除字典最后一个元素,返回一个key-value的元组 ('c', 3)
# res = d.pop('d', '不存在')      # 删除指定key并返回该值,若不存在返回default pop(key, default)
  • 浅复制
# 浅复制,第一层开辟新地址,而第二次共用相同地址
d = dict(a=1, b=2,c=3)
# d1 = d.copy()

# d1['a'] = 11					  # 复制后对象与原对象独立,修改一个不会影响另一个
# print(d, d1)                    # {'a': 1, 'b': 2, 'c': 3} {'a': 11, 'b': 2, 'c': 3}

# 浅复制只会复制字典本身,如果字典中还有字典将不被复制,即共用相同物理地址
# d = {'a':{'book': 'Python入门到放弃', 'price': 49.9}, 'b':2, 'c':3}
# len(d)							# 返回字典中键值对数
# d1 = d.copy()
# d1['a']['book'] = 'Java EE 轻量级'
# print(d, id(d))                  # {'a': {'book': 'Java EE 轻量级', 'price': 49.9}, 'b': 2, 'c': 3} 2801800510784
# print(d1, id(d1))                # {'a': {'book': 'Java EE 轻量级', 'price': 49.9}, 'b': 2, 'c': 3} 2801800510784
  • 遍历
# keys()返回字典的所有key
for k in d.keys():
    print(d[k])
# values返回一个序列,保存字典中所有值
for v in d.values():
    print(v)
# items返回项,保存字典中所有key-value对
for k, v in d.items():
    print(k, v)
4. 集合
  • 集合(set),与列表类似,但其存储的对象序列无序,且不包含重复值,对象不可变
4.1 集合方法
s = {'a', 'b', 'c'}             # 等价于s = set('abc')
# len(s)                          # 获取集合中元素数
# s.add('f')                      # 向set中添加元素
# s.update(set('df'))             # 将一个集合中元素添加到另一个集合
# s.remove('b')                   # 删除指定元素
# s.pop()                         # 默认移除最后一个元素
# s.clear()                       # 清空
4.2 集合运算
  • & 交集运算
  • | 并集运算
  • - 差集运算
  • ^ 异或集
  • > 判断⼀个集合是否是另⼀个集合的真超集
  • >=检查⼀个集合是否是另⼀个集合的超集
  • < 检查⼀个集合是否是另⼀个集合的真⼦集
  • <= 检查⼀个集合是否是另⼀个集合的⼦集