一、元组

1.元组的特点

  • 有序:有序意味着元组支持通过下标索引访问元素
  • 可重复:可以存储重复的数据
  • 不可修改:存储在元组中的数据无法修改。然而,对于存储在元组中的列表,是可以修改列表中的元素的,但是无法将列表转换成其他类型的容器。
  • 可混装:可以同时存储字符串、列表等元素

2.元组的操作

由于元组不可修改的特性,元组支持的操作相对少。如增加、修改与删除操作,元组都不支持。

# 定义一个空元组
tp1 = () # 方法1
tp1 = tuple()

# 定义一个非空元组
tp1 = (1, 2, 3, (3, 5)) # 元组可以嵌套元组

print(tp1.count(3)) # 查询元素 3 在元组中出现的次数
print(tp1.index((3, 5))) # 查询元素(3, 5)在元组中的索引
print(len(tp1)) # 查询元组中的元素个数
print(tp1[3][0]) # 查询嵌套在元组中的元组的第一个元素的值

3.元组的遍历

由于元组是有序的,因此他的遍历方法跟之前提到的字符串和列表比较类似

# 通过for循环遍历
tp1 = (1, 2, 3, (3, 5))
for item in tp1:
    print(item)

# 通过索引遍历
i = 0
while i < len(tp1):
    print(tp1[i])
    i += 1

二、集合

1.集合的特点

  • 无序:元素在集合中是无序的,也就不可以通过下标访问
  • 不可重复:集合中的元素不可重复,定义了重复的数据会自动去重
  • 只能存储不可变类型元素:受“不可重复”特点的限制,集合中只可以存储不可变类型(整数、浮点数、字符串、布尔值、元组)
  • 可修改:集合中的元素可以新增、删除,但不可以修改集合中的元素(因为只能存储不可变类型元素)

2.集合的操作

# 定义一个空集合
set1 = set() # 只能通过这个方式定义空集合,因为set1 = {}定义的是一个空字典

# 定义一个非空集合
set1 = {1, ('a', 'b'), 2, 2}
print(set1)

# 新增元素
set1.add(3)
print(set1)

# 删除元素
set1.remove(3) # 删除指定元素3
print(set1)
set1.pop() # 随机删除一个元素
print(set1)

# 多集合间的差集与并集
set1 = {1, 2, 3}
set2 = {2, 5, 6}
set1.difference_update(set2) # 将集合1的元素更新为集合1与集合2的差集
print(set1)
set1.update(set2) # 将集合1的元素更新为集合1与集合2的并集
print(set1)

3.集合的遍历

由于集合的无序性,无法通过索引遍历。

# 使用for循环遍历集合
set1 = {1, 'a', 3}
for i in set1:
    print(i)

三、字典

1.字典的特点

存储键值对(key/value):存储的格式为{'性别':'男'}格式的键值对

键(key)禁止重复:存储的元素中,他的key必须是唯一的,因此key只能存储不可变类型。但是value可以存储任意类型,也可以重复。

2.字典的操作

# 定义空字典
dt1 = {}
dt1 = dict()

# 定义非空字典
dt1 = {
    "id": 1001,
    "name": "张三",
    "score": {"math": 90, "english": 85},  # 字典里还能套字典
    "hobbies": ["读书", "篮球", "编程"]
}

# 查询元素
print(dt1.get('name'))
print(dt1['score'])
print(dt1.keys()) # 获取所有的key,本质是列表
print(dt1.values()) # 获取所有的value,本质是列表
print(dt1.items()) # 获取所有的键值对,每对键值对都封装为元组,存储在列表里

# 新增元素
dt1['gender'] = '男'
print(dt1)

# 修改元素
dt1['name'] = '李四'
print(dt1)

# 删除元素
dt1.pop('gender')
print(dt1)
del dt1['hobbies']
print(dt1)
dt1.clear() # 清空字典,此时还可以打印
print(dt1)
del dt1 # 删除整个字典,此时打印会报错

3.字典的遍历

dt1 = {
    "id": 1001,
    "name": "张三",
    "score": {"math": 90, "english": 85},  # 字典里还能套字典
    "hobbies": ["读书", "篮球", "编程"]
}

# 利用内置方法.items直接遍历
for key, value in dt1.items():
    print(f'键:{key},值:{value}')

print('*'*10+'分割线'+'*'*10)

# 直接for循环取到的是key,根据key去查value
for key in dt1:
    print(f'键:{key},值:{dt1[key]}')

四、序列的切片操作

1.概念

作用:从一个序列中按一定规则截取出一个子序列

语法:序列[开始索引:结束位置:步长],如果步长为负数,则是倒着切片

2.实操

之前讲过,列表、字符串、元组都是有序的,因此都可以做切片操作

# 列表是一种序列
list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
sub_list1 = list1[0:9:1] # 从索引为0的位置开始,到索引为9的位置结束(不包含该元素),步长为1(每1个元素取1个)
print(sub_list1)
sub_list2 = list1[1:8:2] # 从索引为1的位置开始,到索引为8的位置结束(不包含该元素),步长为2(每2个元素取1个)
print(sub_list2)
sub_list3 = list1[-1:2:-2] # 从索引为-1的位置开始(元素9),到索引为2的位置结束(不包含该元素),倒着取,步长为2(每隔2个元素取1个)
print(sub_list3)

更多推荐