python基础:(原生)数据结构
本篇文章主要详细介绍python中的四大容器:list、tuple、dict 和 set的相关知识,希望能够对大家稍微起到一点帮助!
一、列表(list)
1、列表的创建
my_List = [元素1……元素n]
my_List = list()
2、特点
-
有序保存任意类型的数据
-
并且是可变数据类型
因为是有序的,所以
- 支持下标索引
- 切片
3、列表的循环遍历
- while循环
# 依次拿出列表中的值
i = 0
while i < len(list_Name):
print(list_name[i])
i += 1
# 依次拿出列表中的值
for 临时遍历[x] in list_Name:
print(临时变量[x])
#依次拿出列表中的索引和值
for index,value in enumerate(list_name):
# 注意:首先遍历出的是索引,然后是值,此方法可用于str、list、tuple这种有序的数据类型
print(index,value)
4、列表的常用操作
#(1)len
说明:获取列表的长度
格式:len(list_name)
#1、查找元素
#(1)索引查找
#list_name[index]
#(2)count
说明:获取某个元素在列表中的个数
格式:list_name.count(元素)
#(3)index
说明:获取某个元素在列表中首次出现的位置(下标索引),如果没有查找到,则抛出异常
格式:list_name.index(元素)
#(4)in
说明:判断某个元素在列表中
格式:if 元素 in list_name:
#(5)not in
说明:判断某个元素不在列表中
格式:if 元素 not in List_name:
#2、增加元素
#(1)append
说明:追加。将对象添加到列表的最末尾
格式:List_name.append(object)
#(2)extend
说明:追加可迭代对象,并将对象拆分为最小单元,并将这一个个的最小单元依次存入列表的末尾
格式:list_name.extend(object)
#(3)insert
说明:将对象插入到列表的某个位置(下标索引)
格式:list_name(index,object)
#3、删除
#(1)del
说明:用于删除某个索引位置的元素
格式:del list_name[index]
#(2)pop
说明:用于删除某个索引位置的元素
格式:list_name.pop(index)
#(3)remove
说明:用于删除列表中的某个对象
格式:list_name.remove(object)
#(4)clear
说明:清空元素
格式:list_name.clear()
#4、修改元素
list[index] = new_value
#5、排序
#(1)reverse
说明:反转列表=>>倒序排列
格式:list_name.reverse
注意:因为是列表树有序的,所以可以使用切片,那么切片也可以倒序排列
格式:list_name[::-1]
#(2)sort
说明:列表升序排列(小>>大)
格式:list_name.sort() == list_name.sort(reverse=False)
#(3)sort(reverse=True)
说明:列表降序排列(大>>小)
格式:list_name.sort(reverse=True)
5、列表嵌套
list_name = [ [] , [] , [] , ……]
6、案例
# 请问这个程序中最终输出的结果是什么?
my_list = [1,True, 3.14, 44, 22]
new_list = my_list
for value in new_list:
my_list.remove(value)
print(new_list)
#分析:
#1、第二行代码是获取访问地址,那么也就证明new_list可以访问new_list中元素
#2、接下来看for循环,在这里告诉偷偷告诉大家一个冷门知识:for循环遍历可迭代对象,遍历的规则和while循环一样,遍历的是下标索引,而且是1、2、3、这样走的,而且是有顺序的,不会变
#3、那么就按这个规则,再读代码,第一次,删除了my_list中的元素1没问题,此时my_list中的所以位置调整了,就是都往前移了,那么他们的下标索引也往前移了,那么new_list也一样调整了,因为它是访问而根本没存储
#4、第二次遍历的索引是1,那么取出的3.14,删除的就是my_list的3.14,此时列表位置再次往前移
#5、第三次循环遍历的索引是2,那么就取出22,并删除,此时已经将列表索引循环完了,往后就没了
#6、此时列表中就剩下了True和44
二、元组(tuple)
1、元组的创建
my_tuple = ()
my_tuple = tuple()
2、特点
- 有序存储任意数据类型
- 它是不可变数据类型
- 那么就代表了它除了不能增、删、改以外可以实现列表的大部分功能,比如说下标索引、切片、循环遍历等
3、为什么python要引入元组?
3、元组的循环遍历
i = 0
while i < len(tuple_name):
print(tuple_name(i))
i += 1
for 临时变量[x] in tuple_name:
print(x)
4、元组的常用操作
(1)index
格式:tuplu_name.index(object)
(2)count
格式:tuple_name.count(object)
(3)in
格式:if 元素 in tuple_name:
(4)not……in
格式:if 元素 not in tuple_name:
(5)通过index来获取值
格式:tuple_name[index]
(6)len
格式:len(tuple_name)
5、注意
(1)当列表中只有一个值的时候,必须使用逗号隔开,否则将成为一个其他的数据类型
#格式:tuple_name = (value,)
(2)元组是不可变数据类型,但是可以通过元组嵌套列表来修改列表中的值
#格式:tuple_name = ( 1,2,[ value1,value2,…… ],5,9 )
6、为什么要引入元组,目的为何?
首先,元组是不可变数据类型,那么它就不能增、删、改,也就证明我们不能直接的修改它,那么对于元组中的数据来说是相对安全的,所以引入元组的目的就是为了保护数据的相对安全
三、字典(dict)
1、字典的创建
my_dict = {key:value,key:value,……}
由 key:value 这样的键值对组成
my_dict = dict()
2、作用和特点
- 字典可以保存任意数据类型
- 字典是无序的,这就证明了它不能使用下标索引和切片
- 字典是可变数据类型
3、为什么python要引入字典?
首先我们先看列表和元组,都是有序的,那么就是使用下标索引的方式来获取数据,但是当里面存储了大量数据,并且索引不知道的情况下,只能使用循环遍历并且判断来找到某个值,这样是不是显的特别繁琐,为了解决这种问题,出现了字典,我们可以通过字典的键key来快速、精准、有效的获取想要的值,同时这也证明了字典键key的一个特征:key必须是唯一的,不可变的
4、字典循环遍历
# 依次获取字典的键
for 临时变量[x] in dict_name:
print(x)
# 依次获取字典的键值
for value in dict_name.values():
print(value)
# 获取字典的键值对
for item in dict_name.items():
# 注意:此时输出的是一个元组,因为items是返回一个包含键值对的元组列表,通过for循环已经遍历到元组
print(item)
# 虎丘字典的项,也就是依次获取字典的key和value
for key,value in dict_name.items():
#注意:当字典中存储的都是字符或字符串的时候使用%s
print("key=%s,value=%s" %(key,value))
5、字典的常用操作
#1、增/修
#(1)通过索引增加或修改
说明:当列表中有key,那么就修改value,如果没有,则新建键值对并添加到字典中
格式:dict_name[key] = new_value
#2、查
#(1)len
格式:len(dict_name)
#(2)通过键查
格式:dict_name[key]
#(4)keys
说明:获取某个字典的所有键,并返回一个包含所有键的列表
格式:my_list = list(dict_name.keys())
#(5)values
说明:获取某个字典的所有键值,并返回一个包含所有键值的列表
格式:my_list = list(dict_name.values())
#(6)items
说明:获取某个字典的所有键值对,并返回一个包含所有键值对元组的列表
格式:my_list = list(dict_name.items())
#(7)in
格式:if object in dict_name:
#(8)not in
格式:if object not in dict_name;
#3、删除
#(1)del
说明:删除单个键值对
格式:del dict_name[key]
#(2)clear
说明:清空字典
格式:dict_name.clear()
6、get和setdefault函数的区别
#(1)get
#说明:获取字典中某个键的值
#格式:dict_name.get(key,default)
# 字典录入数据
my_dict = {"name": "张三", "age": 18, "sex": "男"}
#情况一:当key存在于字典中,参数2default不写,返回的是字典中key对应的键值
get.my_dict("name")
#情况二:当key存在于字典中,并且参数2default已经给出具体的值,此时返回的依然是字典中key对应的键值
#情况三:当key不存在字典中,并且参数2default不写,那么返回None,不存入字典
#情况四:当key不存在字典中,参数2已经给出具体的值,那么此时返回default值,不存入字典
#(2)setdefault 设置默认值
#说明:获取字典中某个键的值,如果没有将存入字典
#格式:my_dict.setdefault(key,defualt)
# 字典录入数据
my_dict = {"name": "张三", "age": 18, "sex": "男"}
#情况一:当key存在字典中,参数2default不写,那么将返回字典中key对应的键值
#情况二:当key存在字典中,参数2default已经给出具体的值,此时依然返回字典中key对应的键值
#情况三:当key在字典中不存在,参数2default不写,那么将返回None,并且将 key:None 存入字典
#情况三:当key在字典中不存在,参数2default已经给出具体的值,那么此时返回default值,并且存入字典
"""
get函数于setdefault函数的区别?
(1)相同点:
当key存在字典中,不管写不写参数2default都将返回字典中key对应的键值,然后就不做任何操作
当key不存在字典中,参数2default不写,都返回None
当key不存在字典中,参数2default已经给出具体的值,那么返回default的值
(2)不同点:
get:当key不存在字典中,get只返回None或default值,并且不做任何操作
setdefault:大哥key不存在字典中,setdefault返回None或default,并且要将key:default存入字典
"""
7、注意
#1、key特点
#(1)key在字典中必须是唯一的,不能重复,如果重复最后一个出现的key将覆盖
#(2)key必须是不可变类型,比如 list 就不可以
#2、value特点
#字典中value可以重复
四、集合(set)
1、特点
- 可以存储任意数据类型,但是不能存储可变数据类型,比如list、dict
- 集合是无序数据类型
- 集合是可变的数据类型
- 集合总的元素是唯一的,不能重复
- 集合是可迭代对象,所以可以使用for循环遍历毋庸置疑,并且计算长度len函数也毋庸置疑
2、为什么pytthon要引入集合?有什么作用?
首先要知道集合的一个特性,集合中的元素是唯一的,那么就证明它可以去除重复,这是可以肯定的,其次,集合还可以用于求交集和并集
3、集合定义
# 空集合
set_name = set()
# 带有元素的集合
set_name = {元素1、元素2、……}
4、集合的相关操作
(1)添加元素
1、add函数
格式:set_name.add(object)
2、update函数
格式:set_name.update(lterable“可迭代对象”)
(2)删除元素
1、pop函数
说明:随机删除一个元素
格式:set_name.pop()
2、remove
说明:删除一个指定元素,有则删除,无则报错
格式:set_name.remove(object)
3、discard
说明:删除一个指定元素,有则删除,无则不做任何事情
格式:set_name.discard(object)
(3)去重
# 一个带有与元素的列表
my_list = [1,2,2,3,1,2,4,5]
# 需求:去除重复帮返回一个不带重复值的列表
new_list = list(set(my_list))
print(new_list)
# 分析:
#1、由于集合中的元素是唯一的,如果出现重复值,则保留一个
#2、那么我们就可以先将my_list转换为集合去除重复
#3、由于需求说是要返回的是列表,所以再将集合转换为列表即可
#4、最后存入变量new_list中,并输入
(4)交集
#交集符号:&,交集就是公共的部分
#说明:集合可以获取两个集合的交集
#格式:set1 & ste2
(5)并集
#并集符号:| 并集就是两个集合中不同的部分+1个相同的部分
#说明:集合可以获取两个集合的并集
#格式:set1 | set2
以上均为自己在今天的学习中所收获的,希望csdn官方以及各位朋友见证我的成长,如果本篇文章有什么做的不够完善的地方,还请各位朋友能够多多指教,谢谢!