Python--数据容器

一、数据容器

数据容器是一种可以容纳多份数据的数据类型,容纳的每一份数据类型称之为1个元素。每一个元素可以是任意类型的数据。

数据容器特点对比

列表(list)元组(tuple)字符串(str)集合(set)字典(dict)
元素数量支持多个支持多个支持多个支持多个支持多个
元素类型任意任意仅字符任意k:v
下标索引支持支持支持不支持不支持
重复元素支持支持支持不支持不支持
可修改性支持不支持不支持支持支持
数据有序
是否支持while循环
使用场景可修改、可重复不可修改、可重复一串字符不可重复以key检索value

二、序列

序列是指:内容连续、有序,可以使用下标索引的一类数据容器
列表(list)、元组(tuple)、字符串(str)均可以视为序列。

在这里插入图片描述

如上图,序列的典型特征就是:有序可用下标索引,字符串、元组、列表均满足这个要求

三、列表(list)

3.1、列表定义:

# 字面量
["tai", "bai", "python"]
# 定义变量
name = ["tai", "bai", "python"]
# 定义空列表
name = []
name = list()
# 嵌套列表
message = [[1, 2, 3], ["tai", "bai", "python"], [21, 22, 25]]

3.2、列表下标索引

列表的每一个元素,都有编号称之为下标索引
从前向后的方向,编号从0开始递增
从后往前的方向,编号从-1开始递减

通过下标获取对应位置的元素

列表[下标]

# 通过下标索引取出对应位置的数据
my_list = ["Tom", "Lily", "Rose"]
print(my_list[0])
print(my_list[1])
print(my_list[2])
# 通过下标索引去除数据(倒序取出)
print(my_list[-1])
print(my_list[-2])
print(my_list[-3])

注意:

要注意下标索引的取值范围,超出范围无法取出元素,并且会报错(IndexError: list index out of range)

3.3、列表常用方法:

方法作用
列表.append(元素)向列表中追加一个元素
列表.extend(容器)将数据容器的内容依次去除,追加到列表尾部
列表.insert(下标, 元素)在指定下标出,插入指定的元素
del 列表[下标]删除列表指定下标元素
列表.pop(下标)删除列表指定下标元素(返回删除的元素)
列表.remove(元素)从前向后,删除此元素第一个匹配项
列表.clear()清空列表
列表.count(元素)统计此元素在列表中出现的次数
列表.index(元素)查找指定元素在列表的下标(找不到报错ValueError)
len(列表)统计容器中有多少元素

示例:

# 1.1 查找某元素在列表内的下标索引
index = name.index("tai")
print(f"tai在list的下标为{index}")

# 1.2 如果被查找的元素不存在,会报错   ValueError: 'li' is not in list
# index = name.index("li")
# print(f"li在list的下标为{index}")

# 2、修改特定下标索引的值
name[1] = "libai"
print(name)

# 3、在指定下标位置插入新元素
name.insert(1, "li")
print(name)

# 4、在列表的尾部追加  单个  新元素
name.append("bai")
print(name)

# 5、在列表的尾部追加  一批  新元素
name.extend(["java", "mysql"])
print(name)
# 6、 删除指定下标的元素 (两种方法)
# 6.1 方式1:del 列表[下标]
del name[2]
print(name)
# 6.2 方式2:列表.pop(下标)
element = name.pop(2)
print(f"通过pop取出元素后列表内容为:{name},取出的元素为{element}")

# 7、删除某元素在列表中的第一个匹配项
name.remove("tai")
print(name)

# 8、清空列表
# name.clear()
# print(name)
# 9、统计列表内某元素的数量
count = name.count("bai")
print(f"bai在列表中出现了{count}次")
# 10、统计列表中全部的元素数量
len = len(name)
print(f"name一个有{len}个元素")

3.4、list遍历

def list_while_func():
    """
    使用while循环遍历列表的演示函数
    :return: None
    """
    my_list = ["li", "tai", "bai"]
    # 循环控制变量通过下标索引来控制,默认0
    # 每一次循环将下标索引变量+1
    # 循环条件: 下标索引变量 < 列表的元素数量

    # 定义一个变量用来标记列表的下标
    index = 0           # 初始值的下标为0
    while index < len(my_list):
        print(my_list[index])
        index += 1

# list_while_func()
def list_for_func():
    """
    使用for循环遍历列表的演示函数
    :return: None
    """
    my_list = [1, 2, 3, 4, 5]
    # for 临时变量 in 数据容器:
    for i in my_list:
        print(i)

四、元组(tuple)

4.1、元组定义

# 定义元组字面量
("taibai", 666, True)
# 定义元组变量
t1 = ("taibai", 666, True)
# 定义空元组
t2 = ()
t3 = tuple()
# 嵌套元组
t5 = ((1, 2, 3), (4, 5, 6))

4.2、元组的常用方法

在上述数据容器的描述中,已描述元组是不可修改的,所以并没有 增删改的操作

方法作用
元组.index(元素)查找某个元素,如果数据存在返回对应下标,否则报错(ValueError: tuple.index(x): x not in tuple)
元组.count(元素)统计某个元素在当前元组出现的次数
len(元组)统计元组中的元素个数

示例:

# 元组的操作: index查找方法
t6 = ("tai", "bai", "python", "python")
index = t6.index("bai")
print(f"bai出现在元组的下标为{index}")

# 元组的操作:count统计方法
count = t6.count("python")
print(f"python在元组中出现了{count}次")

# 元组的操作: len函数统计元祖元素数量
len = len(t6)
print(f"t6元组一共有{len}个元素")

4.3、元组的遍历

t6 = ("tai", "bai", "python", "python")
def tuple_while_func():
    i = 0
    while i < len:
        print(t6[i])
        i += 1

# 元组的遍历: for
def tuple_for_func():
    for i in t6:
        print(i)

五、字符串(str)

尽管字符串看起来并不像列表、元组那样,看起来存放了许多数据的容器
但不可否认,字符串也是数据容器的一员
并且字符串也是一个无法修改的数据容器,每次修改只是得到了一个新的字符串

5.1、字符串定义

# 字面量
'taibai'
"taibai"
# 定义变量
name = 'taibai'
name = "taibai"
name = """taibai"""
# 定义空字符串
str1 = ''
str2 = ""
str3 = """"""
str4 = str()

5.2、常用方法

方法作用
字符串[下标]根据下标索引去除特定位置字符
字符串.index(字符串)给定字符的第一个匹配项的下标
字符串.replace(字符串1,字符串2)将字符串内的全部字符串1,替换为字符串2(并不会修改原字符串,而是得到一个新的字符串)
字符串.split(字符串)按照给定字符串,对字符串进行分割,不会修改原字符串,而是得到一个新的列表
字符串.strip()移除首尾的空格和换行符
字符串.strip(字符串)移除首尾的指定字符串(此处是按照单个字符去除)
字符串.count(字符串)统计字符串内某字符串的出现次数
len(字符串)统计字符串的字符个数

示例:

my_str = "My name is taibai"
# 通过下标索引取值
value = my_str[5]
value2 = my_str[-4]
print(f"从字符串{my_str}取下标为5得值为:{value},取下标为-4的值为:{value2}")
# index方法
value = my_str.index("is")
print(value)
# replace方法
my_str1 = my_str.replace("taibai", "taibai_yuan")
print(my_str1)
# split方法
my_list = my_str.split(" ")
print(my_list)
# strip方法 不添加参数去除前后空格 添加参数去除前后参数
my_str = "  My name is taibai  "
my_aa = my_str.strip()
print(my_aa)
my_str = "123My name is taibai321"
my_bb = my_str.strip("123")
print(my_bb)
# 统计字符串中某字符串的出现次数
count = my_str.count("a")
print(f"在{my_str}中a出现了{count}次")
# 统计字符串的长度
num = len(my_str)
print(f"{my_str}长度为{num}")

5.3、字符串遍历

my_str = "My name is taibai"

# 使用while循环遍历
index = 0
while index < len(my_str):
    print(my_str[index])
    index += 1

# 使用for循环遍历
for i in my_str:
    print(i)

六、序列切片

语法

序列[起始下标:结束下标:步长]

表示从序列中,从指定位置开始,依次去除元素,到指定位置结束,得到一个新的序列

  • 起始下标:表示从何处开始,可以不写,不写表示从头开始
  • 结束下标:表示从何处结束,可以不写,不写表示截取到结尾
  • 步长:表示依次取元素的间隔(可以为负数,表示倒序执行)

注意:

此操作不会影响序列本身,而是会得到一个新的序列(列表、元组、字符串)

示例:

# 对list进行切片,从1开始,4结束,步长为1
my_list = [0, 1, 2, 3, 4, 5, 6]
result = my_list[1:4]       # 步长默认为1,可以不写
print(result)

# 对tuple进行切片,从头开始,到最后结束,步长为1
my_tuple = (0, 1, 2, 3, 4, 5, 6)
result1 = my_tuple[:]       # 起始和结束不写,表示从头到尾  步长默认为1,也可以不写
print(result1)

# 对str进行切片,从头开始,到最后结束,步长为2
my_str = "0123456"
result2 = my_str[::2]
print(result2)
# 对str进行切边,从头开始,到最后结束,步长为-1
result3 = my_str[::-1]
print(result3)

# 对列表进行切片,从3开始,到1结束,步长为-1
result4 = my_list[3:1:-1]
print(result4)
# 对元组进行切片,从头开始,到尾结束,步长为-2
result5 = my_tuple[::-2]
print(result5)

七、集合(set)

7.1、集合定义

# 定义集合字面量
{"my", "name", "taibai", "python"}
# 定义集合变量
my_set = {"my", "name", "taibai", "python"}
# 定义空集合
my_set1 = set()

使用下列代码结果可看为 去重且无序

my_set = {"my", "name", "taibai", "python", "python", "python", "python"}
my_set1 = set()
print(my_set)

在这里插入图片描述

7.2、常用方法

方法作用
集合.add(元素)集合内添加一个元素
集合.remove(元素)移除集合内指定的元素
集合.pop()从集合中随机取出一个元素(并返回取出的元素)
集合.clear()将集合清空
集合1.difference(集合2)得到一个新集合,内含2个集合的差集(原有2个集合内容的不变)
集合1.difference_update(集合2)在集合1中,删除集合2中存在的元素(集合1被修改,集合2不变)
集合1.union(集合2)得到1个新集合,内含2个集合的全部元素(原有的2个集合内容不变)
len(集合)得到一个整数,记录了集合的元素数量

示例:

my_set = {"my", "name", "taibai", "python"}
# 添加新元素
my_set.add("taibai_yuan")
print(my_set)
# 移除元素
my_set.remove("my")
print(my_set)
# 随机取出一个元素
string = my_set.pop()
print(string)
print(my_set)
# 清空集合
my_set.clear()
print(my_set)
# 取2个集合的差集
set1 = {"tai", "bai", "yuan"}
set2 = {"my", "name", "tai", "yuan"}
set3 = set1.difference(set2)
print(set1)
print(set2)
print(set3)
# 消除两个集合的差集
set1.difference_update(set2)
print(set1)
print(set2)
# 2个集合合并为1个
set1 = {"tai", "bai", "yuan"}
set2 = {"my", "name", "tai", "yuan"}
set3 = set1.union(set2)
print(set3)

# 统计集合元素数量
count = len(set1)
print(count)

7.3、遍历集合

由于集合无序,不可使用下标。所以不能使用while进行循环遍历

# 集合遍历
for i in set1:
    print(i)

八、字典(dict)

8.1、字典定义

# 定义字典字面量
{"taibai": 21, "yuan": 19, "libai": 30, "zhangsan": 10}
# 定义字典变量
my_dict = {"taibai": 21, "yuan": 19, "libai": 30, "zhangsan": 10}
# 定义空字典
my_dict1 = dict()
my_dict2 = {}

注意:

  • 每一份数据都是k-v键值对
  • 可用于通过key获取value,key不可重复(重复会覆盖)

8.2、常用方法

方法作用
字典[key]获取指定key对应的value值
字典[key] = value添加或更新键值对
字典.pop(key)取出key对应的value并在字典内删除此key的键值对
字典.clear()清空字典
字典.keys()获取字典的全部key,可以用来for循环遍历字典
len(字典)计算字典内的元素数量

示例:

my_dict = {"张三": 99, "李四": 88, "王五": 77}
# 获取指定key对应的value值
value = my_dict["张三"]
# 新增元素
my_dict["太白"] = 100
print(my_dict)
# 更新元素
my_dict["太白"] = 150
print(my_dict)
# 删除元素
value = my_dict.pop("张三")
print(value)
print(my_dict)
# 清空元素
my_dict.clear()
print(my_dict)

# 获取全部的key
my_dict = {"张三": 99, "李四": 88, "王五": 77}
dict_set = my_dict.keys()
print(dict_set)

8.3、遍历字典

# 遍历字典
# 方式一:获取到所有的key来遍历key获取dict的元素
for i in dict_set:
    print(f"{i}:{my_dict[i]}")
# 方式二:直接使用for循环就可以获取到dict的key
for i in my_dict:
    print(f"{i}:{my_dict[i]}")

九、容器通用常用功能

功能作用
通用for循环遍历容器(字典是遍历key)
max()容器内最大元素
min()容器内最小元素
len()容器元素个数
list()转换为列表
tuple()转换为元组
str()转换为字符串
set()转换为集合
sorted(序列,[reverse=True])排序,reverse=True 表示降序(得到一个排好序的序列)

注意:

  • 字典转换为字符串并不会又影响
  • 字典转换为列表会将value丢失
  • 字典转换为元组会将value丢失
  • 字典转换为集合会将value丢失
  • 其余容器转字典,由于其余数据容器并无键值对,所以无法转字典

示例:

my_list = [3, 1, 2, 8, 0]
my_tuple = (3, 1, 2, 8, 0)
my_str = "cdiracl"
my_set = {3, 1, 2, 8, 0}
my_dict = {"key1": 1, "key3": 3, "key2": 2}

# len元素
print(f"列表 元素个数有:{len(my_list)}")
print(f"元组 元素个数有:{len(my_tuple)}")
print(f"字符串 元素个数有:{len(my_str)}")
print(f"集合 元素个数有:{len(my_set)}")
print(f"字典 元素个数有:{len(my_dict)}")

# max最大元素
print(f"列表 元素最大元素有:{max(my_list)}")
print(f"元组 元素最大元素有:{max(my_tuple)}")
print(f"字符串元素最大元素有:{max(my_str)}")
print(f"集合 元素最大元素有:{max(my_set)}")
print(f"字典 元素最大元素有:{max(my_dict)}")

# min最小元素
print(f"列表 元素最小元素有:{min(my_list)}")
print(f"元组 元素最小元素有:{min(my_tuple)}")
print(f"字符串元素最小元素有:{min(my_str)}")
print(f"集合 元素最小元素有:{min(my_set)}")
print(f"字典 元素最小元素有:{min(my_dict)}")

# 类型转换:容器转列表
print(f"列表 转列表有:{list(my_list)}")
print(f"元组 转列表有:{list(my_tuple)}")
print(f"字符串转列表有:{list(my_str)}")
print(f"集合 转列表有:{list(my_set)}")
print(f"字典 转列表有:{list(my_dict)}")
# 类型转换:容器转元组
print(f"列表 转元组有:{tuple(my_list)}")
print(f"元组 转元组有:{tuple(my_tuple)}")
print(f"字符串转元组有:{tuple(my_str)}")
print(f"集合 转元组有:{tuple(my_set)}")
print(f"字典 转元组有:{tuple(my_dict)}")
# 类型转换:容器转字符串
print(f"列表 转字符串有:{str(my_list)}")
print(f"元组 转字符串有:{str(my_tuple)}")
print(f"字符串转字符串有:{str(my_str)}")
print(f"集合 转字符串有:{str(my_set)}")
print(f"字典 转字符串有:{str(my_dict)}")
# 类型转换:容器转集合
print(f"列表 转集合有:{set(my_list)}")
print(f"元组 转集合有:{set(my_tuple)}")
print(f"字符串转集合有:{set(my_str)}")
print(f"集合 转集合有:{set(my_set)}")
print(f"字典 转集合有:{set(my_dict)}")

# 转字典,由于其余数据容器并无键值对,所以无法转字典


# sorted 排序   将内容排序放入列表之中
print(f"列表 对象排序结果有:{sorted(my_list)}")
print(f"元组 对象排序结果有:{sorted(my_tuple)}")
print(f"字符串对象排序结果有:{sorted(my_str)}")
print(f"集合 对象排序结果有:{sorted(my_set)}")
print(f"字典 对象排序结果有:{sorted(my_dict)}")

# 反向排序
print(f"列表 对象排序结果有:{sorted(my_list, reverse=True)}")
print(f"元组 对象排序结果有:{sorted(my_tuple, reverse=True)}")
print(f"字符串对象排序结果有:{sorted(my_str, reverse=True)}")
print(f"集合 对象排序结果有:{sorted(my_set, reverse=True)}")
print(f"字典 对象排序结果有:{sorted(my_dict, reverse=True)}")
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值