python容器(2)

237 阅读7分钟

元组(tuple)

==元组(tuple)是不可变类型==

元组的定义

定义空元组:

方式1(常用): 元组名 = ()  
方式2: 元组名 = tuple()

定义非空元组:

方式1(常用): 元组名 = (元素1 , 元素2 , 元素3 , ...)
方式2: 元组名 = ( (元素1,元素2) , (元素1,元素2) , ...)

注意:如果元组中只有一个元素需要加逗号 定义1个元素的元组: 元组名 = (元素 ,)

# 1.定义空元组
tuple1 = ()
# 可以使用类型()方式定义空元组
tuple2 = tuple()

# 2.定义非空元组
tuple3 = ('张三', '李四', '王五', '赵六')

# 注意: 元组可以存储不同类型数据,但是不建议
tuple4 = ('张三', 10, 3.14, True, None)

# 3.定义嵌套元组
big_tuple = (tuple1, tuple2, tuple3, tuple4)
print(big_tuple)

# 注意:如果元组中只有一个元素需要加逗号
tuple5 = ('张三',)

元组的下标索引

下标索引: 本质就是每个元素对应的编号,但是需要注意的是有两套索引

正索引: 从前到后,从0开始,依次递增

负索引: 从后到前,从-1开始,依次递减

根据索引找元素: 元组名[索引]

元组中最大索引: len(元组)-1

注意: 如果访问了不存在的索引就会报: 索引越界异常(IndexError: tuple index out of range)

#元组嵌套元组
# 定义两个元组,分别存储姓名和年龄
name_tuple = ('张三', '李四', '王五')
age_tuple = (18, 28, 38)
# info嵌套两个小元组
stu_info = (name_tuple, age_tuple)
# 先根据索引获取元素,然后字符串格式化
print(f"{stu_info[0][0]}的年龄是:{stu_info[1][0]}")

最后从info元组中查找元素打印效果如下
张三的年龄18

元组的查询操作

根据索引查询指定位置上的元素: 元组名[索引]

查询元组中元素的总个数: length = len(元组名)

查询指定元素出现的次数: count = 元组名.count(元素) 注意: 查找的元素如果不存在就返回0

查询指定元素的索引位置: index = 元组名.index(元素) 注意: 如果查找的元素不存在就报错: ValueError: tuple.index(x): x not in tuple

#  定义元组存储10,20,30,40,50,10, 10, 30, 10
num_tuple = (10, 20, 30, 40, 50, 10, 10, 30, 10)

#  查询元组中元素的个数
size = len(num_tuple)

#  查询10这个元素出现了几次,查找的元素如果不存在就返回0
count = num_tuple.count(10)

#查询30这个元素的索引位置,如果查找的元素不存在就报错:ValueError: tuple.index(x): x not in tuple
index = num_tuple.index(30)

元组的遍历

# 定义一个元组存储'张三','李四','王五'
name_tuple = ('张三', '李四', '王五')
print(name_tuple)
# for循环遍历:一个个取出赋值给临时变量
for name in name_tuple:
    # 直接输出每个元素
    print(name)

元组的特点

容器特点: 可以容纳多个元素

是否可以混装: 可以容纳不同类型的元素(混装)

是否有下标索引: 数据是有序存储的(有下标序号)

是否支持for循环: 支持(因为for循环又叫遍历循环)

是否支持while循环: 支持(因为有下标序号)

是否允许重复数据: 允许重复数据存在

是否支持元素修改操作: 不支持修改!!!

字符串_str

==字符串(str)是不可变类型==

字符串的定义

定义空字符串:  字符串名 = ''    
字符串名 = ""

定义非空字符串: 字符串名 = '多个字符' 
字符串名 = "多个字符"  
字符串名 = """多个字符_支持换行操作""

字符串的下标索引

标索引: 本质就是每个元素对应的编号,但是需要注意的是有两套索引

正索引: 从前到后,从0开始,依次递增

负索引: 从后到前,从-1开始,依次递减

根据索引找元素: 字符串名[索引]

列表中最大索引: len(字符串名)-1

注意: 如果访问了不存在的索引就会报: 索引越界异常(IndexError: string index out of range)

字符串的查询操作

字符串中的每个元素都单独小字符串,根据索引查询指定位置上的元素: 字符串名[索引]。

查询列表中元素的总个数: length = len(字符串名)

查询指定元素出现的次数: count = 字符串名.count(元素) 注意: 查找的元素如果不存在就返回0

查询指定元素的索引位置: index = 字符串名.index(元素) 注意: 如果查找的元素不存在就报错: ValueError: substring not found

Snipaste_2023-07-20_15-21-02.png

字符串的特有操作

==本质: 不是修改了原有字符串,而是重新生成了一个新字符串或者其他类型内容==

基本方法

把原有字符串中指定内容替换成新内容: 新的字符串 = 原有字符串.replace()

把原有字符串中两端空白或指定内容去除: 新的字符串 = 原有字符串.strip()

根据指定分隔符,把原有字符串切割成多个子串放到列表中: 列表存储切割的小字符 = 原有字符串.split(分隔符)

Snipaste_2023-07-20_16-33-49.png

字符串拓展常用方法

判断是否以某子串开头: 布尔结果 = 字符串名.startswith(子串)

判断是否以某子串结尾: 布尔结果 = 字符串名.endswith(子串)

注意: 以后在字符串中查找索引建议用find,不用index,因为find找不到返回-1,index报错

从左往右找,返回第一个正索引: 索引 = 字符串名.find(子串), 注意:如果不存在就返回-1。从右往左找,返回第一个正索引: 索引 = 字符串名.rfind(子串)

把字符串中所有字母变成大写: 新字符串 = 字符串名.upper()

把字符串中所有字母变成小写: 新字符串 = 字符串名.lower()

# 定义字符串存储姓名
name = '欧阳AbcD娜娜'
# 判断是否以某子串开头: 字符串名.startswith(子串)
print(name.startswith('欧'))  # True
# 判断是否以某子串结尾:字符串名.endswith(子串)
print(name.endswith('娜'))  # True

# 查找指定元素的索引,如果不存在就返回-1
# 字符串名.find(子串): 从左往右找,返回正索引
print(name.find('娜'))  # 6
print(name.index('娜'))  # 6
# find和index的功能几乎一样,只是如果访问内容不存在,不会报错,返回-1
print(name.find('国'))  # -1
# 字符串名.rfind(子串): 从右往左找,返回正索引
print(name.rfind('娜'))  # 7

# 把字符串中所有字母变成大写:字符串名.upper()
print(name.upper())  # 欧阳ABCD娜娜
# 把字符串中所有字母变成小写:字符串名.lower()
print(name.lower())  # 欧阳abcd娜娜

字符串的特点

容器特点: 可以容纳多个元素

是否可以混装: 只能存储字符串

是否有下标索引: 数据是有序存储的(有下标序号)

是否支持for循环: 支持(因为for循环又叫遍历循环)

是否支持while循环: 支持(因为有下标序号)

是否允许重复数据: 允许重复数据存在

是否支持元素修改操作: 不支持修改!!!

序列(列表/元组/字符串)

==序列: 内容连续、有序,支持下标索引的一类数据容器==

切片

常见的序列: 列表、元组、字符串

序列切片格式: 序列[起始索引:结束索引:步长]

        起始索引: 可以省略,省略就代表从头开始
        结束索引: 可以省略,省略就代表一直到末尾结束
        步长: 可以省略,省略就代表步长为1(可以为负数,表示倒序执行)
# 定义列表
list1 = ['a', 'b', 'c', 'd', 'e']
# 需求1: 多种方式打印整个列表
print(list1[::])
print(list1[:])
print(list1)
# 需求2: 获取['a', 'b', 'c']
print(list1[:3])
# 需求3: 获取['b', 'c', 'd']
print(list1[1:4])
# 需求4: 获取['c', 'd', 'e']
print(list1[2:])
# 需求5: 获取['d', 'c', 'b']
print(list1[3:0:-1])
print(list1[-2:-5:-1])

运算符

序列1 + 序列2: 就是把两个序列中的数据取出拼接到一起产生一个新的序列

序列 * n : 就是把序列数据取出重复拼接n次,产生一个新的序列

# 序列:  列表 元组 字符串
# + 和 *: 运算符操作序列的时候,本质是产生了一个新的序列
# 演示列表
list1 = [1, 2, 3]
list2 = [4]
print(list1 + list2)  # [1, 2, 3, 4]
print(list1 * 2)  # [1, 2, 3, 1, 2, 3]

# 演示元组
tuple1 = (1, 2, 3)
tuple2 = (4,)
print(tuple1 + tuple2)  # (1, 2, 3, 4)
print(tuple1 * 2)  # (1, 2, 3, 1, 2, 3)

# 演示字符串
str1 = '123'
str2 = '4'
print(str1 + str2)  # "1234"
print(str1 * 2)  # "123123"