Python数据容器(列表list、元组tuple、字符串str、字典dict、集合set)详解

一、数据容器概念

相关介绍:

  • 一种可以容纳多份数据的数据类型,容纳的每一份数据称之为一个元素。每一个元素,可以是任意类型的数据
  • 分为五类:列表[list]、元组(tuple)、字符串(str)、集合{set}、字典{dict}

相应区别:

列表 元祖 字符串 集合 字典
<元素数量> 多个 多个 多个 多个 多个
<元素类型> 任意 任意 仅字符 任意 key(除字典外任意):value(任意)
<下表索引> 支持 支持 支持 不支持 不支持
<重复元素> 支持 支持 支持 不支持 不支持
<可否修改> 支持 不支持 不支持 支持 支持
<数据有序>

相应特点:

都支持for循环,集合、字典不支持(无法下标索引)

  • 列表: 有一批数据,需要可修改、可重复的存储场景
  • 元祖: 有一批数据,不可以修改、但可以重复的存储场景
  • 字符串:一串文本字符串的存储场景
  • 集合: 有一批数据,需要去重存储场景
  • 字典: 有一批数据,需要用key检索value的存储场景

二、数据容器-列表[list]

解释:存放数据,但可以修改

python 复制代码
语法:[元素1,元素2,...]

1. 列表的创建

python 复制代码
# 案例
name_list = ['1','sadas',True,'4','5']       # 多种类型,也可以嵌套多个列表
print(name_list)
print(type(name_list))          # 输出都是列表类型: <class 'list'>

2. 列表的方法

2.1. 查询元素

语法:列表.index(元素)

python 复制代码
# 案例
my_list = ["python","wl","1"]
index = my_list.index("python")
print(f"index的下表索引值是: {index}")        # 输出:0

2.2. 索引获取元素

python 复制代码
# 案例
name_list = ['1','sadas',True,'4','5']      # 代表0,1,2,3,4,5 或者 -5.-4,-3,-2,-1
print(name_list[0])             			# 输出:1
print(name_list[-5])            			# 输出:1
python 复制代码
# 案例
name_list = [['1','sadas'],[True,'4','5']]   # 嵌套多个列表
print(name_list[0][0])          			# 输出:1
print(name_list[1][0])          			# 输出:True

2.3. 修改索引元素

语法:列表[下标] = 值

python 复制代码
# 案例
my_list = ["python","wl","1"]
my_list[2] = 2                              # 正向下标
print(f"修改后my_list值: {my_list}")			# 输出:['python', 'wl', 2]

my_list[-1] = -1                            # 正向下标
print(f"修改后my_list值: {my_list}")			# 输出:['python', 'wl', -1]

2.4. 插入列表元素

语法:列表.insert(下标,元素) ,指定索引位置插入

python 复制代码
# 案例
my_list = ["python","wl","1"]
my_list.insert(0,"888")
print(f"插入一个数888后:{my_list}")			# 输出:['888', 'python', 'wl', '1']

2.5. 追加元素

语法:列表.append(元素), 追加到尾部

python 复制代码
# 案例
my_list = ["python","wl","1"]
my_list.append("999")                     	# 也可以追加新列表 my_list.append([555,222])
print(f"最后追加元素999:{my_list}")			# 输出:['python', 'wl', '1', '999']

2.6. 删除元素

语法1: del 列表[下标] del 仅仅完成删除

python 复制代码
# 案例
my_list = ["python","wl","1"]                  	# 语法1
del my_list[0]                                 	# 注意括号,del 仅仅完成删除
print(f"删除第一个python: {my_list}")			# 输出:['wl', '1']

语法2: 列表.pop(下标) 不仅删除元素,还可以返回值得到它

python 复制代码
#案例
my_list = ["python","wl","1"]                  	# 语法2
my_pop = my_list.pop(0)                        	# 注意括号,pop不仅删除,还可以返回值得到它
print(f"删除第一个python: {my_list},删除的是 {my_pop}")		# 输出:['wl', '1'],删除的是 python

语法3: 列表.remove(元素) 删除某一个元素,从前往后第一个删除

python 复制代码
# 案例
my_list = ["python","python","wl","1"]         	# 语法3
my_list.remove('python')						# 只删除第一个
print(f"删除第一个python: {my_list}")           	# 输出:['python', 'wl', '1']

2.7. 清空元素

语法: 列表.clear()

python 复制代码
# 案例
my_list = ["python","wl","1"]
my_list.clear()
print(f"全部清空列表,结果是:{my_list}")            # 输出:[]

2.8. 统计某个元素

语法: 列表.count()

python 复制代码
# 案例
my_list = [1,2,2,1,3,4]
count = my_list.count(1)
print(f"列表1的数量是:{count}")                   # 输出:2

2.9. 统计所有元素

语法:len(列表)

python 复制代码
# 案例
my_list = ["python","wl","1"]
print(len(my_list))                             # 输出:3

3. 列表的遍历

3.1. 利用while循环获取元素

解释:1.自定循环条件,自行控制 2.通过条件控制做到无限循环

python 复制代码
# 案例  依次取出列表元素
my_list = ["python","wl","1"]
print(type(my_list))
index = 0
while index < len(my_list):     # len 表示列表中总数小于0,进行循环
    a = my_list[index]
    print(f"列表的 {index}元素:{a}")
    index += 1                  # index = index + 1

3.2. 利用for循环获取元素

解释:1.不可以自定循环条件,只能从容器里取出数据 2.理论不可以无限循环

python 复制代码
# 案例  依次取出列表元素
my_list = ["python",3,4,5]
for a in my_list:
    print(f"列表的元素:{a}")

3.3. 利用pandas制作表格,并存储

python 复制代码
# 案例
import pandas as pd

list = [{'mtime': '2022-12-05', 'title': '国家卫健委', 'digest': '全国累计报告接种新冠病毒疫苗344429.5万剂次'}, {'mtime': '2022-12-05', 'title': '5日0---12时重庆', 'digest': '新增本土确诊病例73例和本土无症状感染者919例'}]
data = pd.DataFrame(list)
print(data)
# 输出:
#         mtime       title                     digest
# 0  2022-12-05       国家卫健委  全国累计报告接种新冠病毒疫苗344429.5万剂次
# 1  2022-12-05  5日0---12时 重庆   新增本土确诊病例73例和本土无症状感染者919例

# 存入数据,utf-8-sig编码防止中文乱码
data.to_csv("sj1.csv",encoding="utf-8-sig")

3.4. 使用for循环依次打印数据

python 复制代码
# 案例
list = [{'mtime': '2022-12-05', 'title': '国家卫健委', 'digest': '全国累计报告接种新冠病毒疫苗344429.5万剂次'}, {'mtime': '2022-12-05', 'title': '5日0---12时重庆', 'digest': '新增本土确诊病例73例和本土无症状感染者919例'}]
for item in list:
    mtime = item["mtime"]
    title = item["title"]
    digest = item["digest"]
    print(f"{mtime}, {title}, {digest}")
# 输出:
# 2022-12-05, 国家卫健委, 全国累计报告接种新冠病毒疫苗344429.5万剂次
# 2022-12-05, 5日0---12时重庆, 新增本土确诊病例73例和本土无症状感染者919例

3.5. 使用while循环依次打印数据

python 复制代码
# 案例
list = [{'mtime': '2022-12-05', 'title': '国家卫健委', 'digest': '全国累计报告接种新冠病毒疫苗344429.5万剂次'}, {'mtime': '2022-12-05', 'title': '5日0---12时重庆', 'digest': '新增本土确诊病例73例和本土无症状感染者919例'}]
x = 0
while x < len(list):
    mtime = list[x]["mtime"]
    title = list[x]["title"]
    digest = list[x]["digest"]
    print(f"{mtime}, {title},{digest}")
    x += 1
    
# 输出:
# 2022-12-05, 国家卫健委, 全国累计报告接种新冠病毒疫苗344429.5万剂次
# 2022-12-05, 5日0---12时重庆, 新增本土确诊病例73例和本土无症状感染者919例

三、数据容器-元祖(tuple)

解释:存放数据,不可修改(只读方式),但可以修改元素内容;

python 复制代码
语法:(元素1,元素2,...)

1. 元祖的创建

python 复制代码
# 案例
my1_tuple = ("python","wl","1")
my2_tuple = ()                              	# 空元祖方式1
my3_tuple = tuple()                         	# 空元祖方式2
my4_tuple = ("python",)                     	# 注意:定义一个元祖,需要加,否则就成了字符串类型
my5_tuple = (["python","wl"],"1")          		# 注意:元祖里的列表可以删除,修改等
print(f"my1_tuple类型是: {type(my1_tuple)},内容是:{my1_tuple}")
print(f"my2_tuple类型是: {type(my2_tuple)},内容是:{my2_tuple}")
print(f"my3_tuple类型是: {type(my3_tuple)},内容是:{my3_tuple}")
print(f"my4_tuple类型是: {type(my4_tuple)},内容是:{my4_tuple}")
print(f"my5_tuple类型是: {type(my5_tuple)},内容是:{my5_tuple}")
my5_tuple[0][1] = "修改内容"
print(f"修改的内容后:{my5_tuple}")           	# 输出:(['python', '修改内容'], '1')
del my5_tuple[0][0]                        	 	# 删除元祖中的列表值
print(f"删除元祖中列表第一个值:{my5_tuple}")    	# 输出:(['wl'], '1')

2. 元祖的方法

2.1. 元祖-获取元素

python 复制代码
# 案例 
my_tuple = ((1,2,3),(7,8,9))    		# 元祖支持嵌套
print(f"my_tuple取出9的数据: {my_tuple[1][2]}")		# 输出9

2.2. 元祖-查询元素

语法: 元祖.index

python 复制代码
# 案例 
my_tuple = ('python','wl',1,'python')
print(my_tuple.index('python'))              # 输出:0

2.3. 元祖-统计某个元素

语法: 元祖.count

python 复制代码
# 案例 
my_tuple = ('python','wl',1,'python')
print(my_tuple.count('python'))              # 输出:2

2.4. 统计-统计所有元素

语法: 元祖.count

python 复制代码
# 案例 
my_tuple = ('python','wl',1,'python')
print(len(my_tuple))                         # 输出:4

3. 元祖的遍历

3.1. 利用while循环获取元素

解释:1.自定循环条件,自行控制 2.通过条件控制做到无限循环

python 复制代码
# 案例  依次取出元祖元素
my_tuple = ("python","wl","1")
print(type(my_tuple))
index = 0
while index < len(my_tuple):     # len 表示列表中总数小于0,进行循环
    a = my_tuple[index]
    print(f"元祖的 {index}元素:{a}")
    index += 1                  # index = index + 1

3.2. 利用for循环获取元素

解释:1.不可以自定循环条件,只能从容器里取出数据 2.理论不可以无限循环

python 复制代码
# 案例  依次取出元祖元素
my_tuple = ("python",3,4,5)
print(type(my_tuple))
for a in my_tuple:
    print(f"元祖的元素:{a}")

四、数据容器-字符串(str)

特点:不支持修改

1. 字符串的方法

1.1. 字符串-索引获取元素

注意:空格也算一个字符

python 复制代码
# 案例
my_str = "i is wl"
v1 = my_str[0]
v2 = my_str[-1]
print(f"首个值v1:{v1},最后值v2:{v2}")  # 输出:v1:i, v2:c

1.2. 字符串-查找元素

语法:字符串.index(值)

python 复制代码
# 案例
my_str = "i is wl"
v = my_str.index("is")
print(f"and的起始下标v:{v}")            # 输出:2

1.3. 字符串-替换元素

语法:字符串.replace(原值,现值)

python 复制代码
# 案例
my_str = "i is wl"
v = my_str.replace("i","t")
print(f"把所有的i替换成t:{v}")          # 输出:t ts wl

1.4. 字符串-分割元素

语法:字符串.split(分割值)

python 复制代码
# 案例
my_str = "i is wl"
v = my_str.split( )                       # 空格切分
print(f"用空格风格my_str:{v}")            # 输出:['i', 'is', 'wl']

1.5. 字符串-规整元素

语法:字符串.strip(去除值) ,空代表去除前后空格

python 复制代码
# 案例
my_str = "12i is wl21"
v = my_str.strip("12")                     # 去除12,实际去除"1"和"2"
print(f"去掉12后my_str:{v}")              # 输出:i is wl

1.6. 字符串-统计某个元素

语法:字符串count(统计值)

python 复制代码
#案例
my_str = "i is wl"
v = my_str.count("i")
print(f"i出现的次数:{v}")                    # 输出:2

1.7. 字符串-统计所有元素

语法:字符串len()

python 复制代码
#案例
my_str = "i is wl"
v = len(my_str)
print(f"my_str总数长度是:{v}")                  # 输出:8

五、数据容器-集合{set}

特点:相比其他,不支持重复集合,自带去重,并且输出是无序的

python 复制代码
语法 : 变量 = {元素1,元素2....}

1. 集合的创建

python 复制代码
#案例
my_set = {"python","wl",4,"wl"}
print(my_set)                         	# 输出:{'python', 4, 'wl'},故是无序的,不支持下标

2. 集合的方法

2.1. 集合-增加元素

python 复制代码
# 案例
my_set = {"python","wl",4,"wl"}
my_set.add("Python")                    # 如果增加相同数据等于没有写
print(f"增加一个数my_set结果是:{my_set}")	# 输出:{'wl', 'Python', 'python', 4}

2.2. 集合-移除元素

python 复制代码
# 案例
my_set = {"python","wl",4,"wl"}
my_set.remove("python")                 	# 删除所有,再去重
print(f"移除一个数my_set结果是:{my_set}") 	# 输出:{'wl', 4}

2.3. 集合-随机取出元素

python 复制代码
# 案例
my_set = {"python","wl",4,"wl"}
element = my_set.pop()                  	# 随机取,无法指定
print(f"{element}")							# 
print(f"随机取一个数my_set结果是:{my_set}")	# 

2.4. 集合-清空元素

python 复制代码
# 案例
my_set = {"python","wl",4,"wl"}
my_set.clear()
print(f"清空my_set结果是:{my_set}")       # 输出:set()

2.5. 集合-取(消除)两个集合的差

python 复制代码
# 案例
set1 = {1,2,3}
set2 = {2,3,4}
f_set = set1.difference(set2)
print(f"除set1中有而set2没有的结果是:{f_set}")   # 输出:{1}
set1.difference_update(set2)       				# 消除差集,集合2不变化
print(set1)                                     # 输出:{1}
print(set2)                                     # 输出:{2, 3, 4}

2.6. 集合-合并元素

python 复制代码
# 案例
set1 = {1,2,3}
set2 = {2,3,4}
set3 = set1.union(set2)
print(f"集合合并后set3:{set3}")                # 输出:(去重):{1, 2, 3, 4}

2.7. 集合-统计元素数量(去重)

python 复制代码
# 案例
set1 = {1,2,3,2,3,4}
num = len(set1)
print(f"集合合并后set3:{num}")                  # 输出(去重):4 

3. 集合的遍历

说明:因为不支持下标索引,所以while循环不支持,支持for循环

python 复制代码
# 案例
set1 = {1,2,3,2,3,4}
for a in set1:
    print(f"集合元素有:{a}")

六、数据容器-字典{dict}

解释:字和其相关联的含义
注意:字典可以任意类型,不允许重复,会覆盖

python 复制代码
语法: 变量 = {key:value,key:value.....}

1. 字典的创建

python 复制代码
# 案例
my_dict = {"张三":99,"李四":98,"王五":90}
print(f"my_dict类型是:{type(my_dict)},内容是:{my_dict}")	# 输出:<class 'dict'>

2. 字典的方法

2.1. 字典-key取值

python 复制代码
# 案例
my_dict = {"张三":99,"李四":98,"王五":90}
s = my_dict['张三']
print(f"张三对应的值是:{s}")               # 输出:99

2.2. 字典-嵌套取值

python 复制代码
# 案例
my_dict = {
    "张三":{
        "语文":99,"数学":70
    },"李四":{
        "语文":88,"数学":80
    },"王五":{
        "语文":80,"数学":68
    }
}
s = my_dict["王五"]["数学"]
print(f"王五对应的数学值是:{s}")           # 输出:68

2.3. 字典-新增元素

python 复制代码
# 案例
my_dict = {"张三":99,"李四":98,"王五":90}
my_dict['赵六'] = 77
print(f"新增赵六成绩后:{my_dict}")

2.4. 字典-更新元素

python 复制代码
# 案例
my_dict = {"张三":99,"李四":98,"王五":90}
my_dict['张三'] = 77
print(f"新增赵六成绩后:{my_dict}")

2.5. 字典-删除元素

python 复制代码
# 案例
my_dict = {"张三":99,"李四":98,"王五":90}
my_dict.pop("张三")
print(f"删除张三后:{my_dict}")

2.6. 字典-清空元素

python 复制代码
# 案例
my_dict = {"张三":99,"李四":98,"王五":90}
my_dict.clear()
print(f"清空后:{my_dict}")

2.7. 字典-取key、value值

python 复制代码
# 案例
my_dict = {"张三":99,"李四":98,"王五":90}
s = my_dict.keys()
print(f"{s}")
for s in my_dict:                       # for循环输出value值,不支持while循环
    print(f"{my_dict[s]}")

2.8. 字典-统计所有元素

python 复制代码
# 案例
my_dict = {"张三":99,"李四":98,"王五":90}
num = len(my_dict)
print(f"数量是:{num}")                  # 输出:3

3. 字典的综合案例

要求:对名次为3的语文增加10分,并晋升一名次

python 复制代码
# 案例
my_dict = {
    "张三":{
        "名次":8,
        "语文":99,
        "数学":70
    },"李四":{
        "名次":10,
        "语文":88,
        "数学":80
    },"王五":{
        "名次":3,
        "语文":80,
        "数学":68
    }
}
print(f"升级之前是:{my_dict}")

for name in my_dict:
    if my_dict[name]["名次"] == 3:        # 当名次为3时,
        my_dict[name]["名次"] = 2         # 晋升一名次,改为2,
        my_dict[name]["语文"] += 10       # 语文成绩+10分
print(f"升级之后是:{my_dict}")

七、数据容器的切片

解释:从一个序列中,取出子序列

语法:序列[起始下标:结束下标:步长] 步长1表示,一个个取;2表示间隔一个取

1. 列表list

python 复制代码
# 案例
my_list = [0,1,2,3,4,5,6,7,8,9]
result_1 = my_list[1:3]                     # 步长默认是1,可以不写
print(f"从第二个到四个取,result_1结果是:{result_1}")

2. 元祖tuple

python 复制代码
# 案例
my_tuple = (0,1,2,3,4,5,6,7,8,9)
result_2 = my_tuple[::2]                    # 空代表从头到尾,2代表步长
print(f"从头到尾,间隔1,result_2结果是:{result_2}")

3. 字符串

python 复制代码
# 案例
my_str = "0123456789"
result_3 = my_str[::-2]
print(f"从尾到头,间隔1,result_3结果是:{result_3}")
python 复制代码
# 案例 正常取出数 "我是你哥"
my_str = "哥大我叫请,啊哥你是我,好你"
s1 = my_str[::-1][3:7]                          # 先倒转,再取值。注意最后的下标索引
print(f"方式s1结果是:{s1}")
s2 = my_str[7:11][::-1]                         # 先取值,再倒转。注意最后的下标索引
print(f"方式s2结果是:{s2}")
s3 = my_str.split(",")[1].replace("啊","")[::-1]      # 先用,分割取值第二个再把"啊"替换掉 最后倒序
print(f"方式s3结果是:{s3}")

八、数据容器的通用操作(排序、转换)

python 复制代码
# 案例
my_list = [1,2,3,4,5]
my_tuple = (1,2,3,4,5)
my_str = "abcdefgh"
my_set = {1,2,3,4,5}
my_dict = {"key1":1,"key2":2,"key3":3}

1. 容器取值(max)

python 复制代码
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)}")

2. 容器转列表

python 复制代码
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)}")

3. 容器转元祖

python 复制代码
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)}")

4. 容器转字符串、集合

解释:字典dict不支持,缺少键值对;字符串、集合都是无序)

5. 容器的排序

5.1. 排序

语法:sorted(容器,reverse=False)

python 复制代码
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)}")

5.2. 降序

python 复制代码
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)}")

5.3. 根据数字下标定义排序方法 sort

python 复制代码
my_list = [["a",67],["a",7],["a",52]]

# 方式1
def sort_key(element):
    return element[1]
my_list.sort(key=sort_key,reverse=False)       # True/flase:表示升序降序

# 方式2 利用匿名函数lambda
my_list.sort(key=lambda element:element[1],reverse=False)
print(my_list)
相关推荐
小鹿( ﹡ˆoˆ﹡ )几秒前
探索IP协议的神秘面纱:Python中的网络通信
python·tcp/ip·php
卷心菜小温15 分钟前
【BUG】P-tuningv2微调ChatGLM2-6B时所踩的坑
python·深度学习·语言模型·nlp·bug
陈苏同学39 分钟前
4. 将pycharm本地项目同步到(Linux)服务器上——深度学习·科研实践·从0到1
linux·服务器·ide·人工智能·python·深度学习·pycharm
唐家小妹42 分钟前
介绍一款开源的 Modern GUI PySide6 / PyQt6的使用
python·pyqt
羊小猪~~1 小时前
深度学习项目----用LSTM模型预测股价(包含LSTM网络简介,代码数据均可下载)
pytorch·python·rnn·深度学习·机器学习·数据分析·lstm
Marst Code2 小时前
(Django)初步使用
后端·python·django
985小水博一枚呀2 小时前
【对于Python爬虫的理解】数据挖掘、信息聚合、价格监控、新闻爬取等,附代码。
爬虫·python·深度学习·数据挖掘
立秋67892 小时前
Python的defaultdict详解
服务器·windows·python
萧鼎2 小时前
Python第三方库选择与使用陷阱避免
开发语言·python
白拾3 小时前
使用Conda管理python环境的指南
开发语言·python·conda