容器类型 (str list tuple set dict)
一. list 列表类型
特征:可获取,可修改,有序
1.定义空列表
listvar = []
print(listvar,type(listvar))
2.定义普通列表
listvar = [19,3.14,"你好",5-6j]
3.获取列表中的元素
正向索引 : 0 1 2 3
listvar = [19,3.14,"你好",5-6j]
逆向索引 : -4 -3 -2 -1
res = listvar[2]
print(res)
4.获取列表中最后一个元素
通过逆向索引下标
res = listvar[-1]
print(res)
通过len来获取长度
len 可以获取容器中的元素个数(长度)
res = len(listvar)
print(res)
length = res -1 # 4 -1=3
获取最后一个元素的索引下标
res = listvar[len (listvar)-1]
print(res)
4.修改列表中的元素
listvar =[19,3.14,"你好",5-6j]
listvar[1] = 11
print(listvar)
二.tuple 元组类型
特点:可获取,不可修改,有序
1.定义一个空元组
tuplevar = ()
什么元素不写,可以表达空元祖的概念
定义一个普通元组
tuplevar("啊","为")
2.获取元组当中数据
res = tuplevar[1]
print(res)
不可修改元组中的数据
3.注意点:
区分是否是元组,由逗号这个标识符决定
三 字符串
特征:可获取,不可修改,有序
集合类型 set (交差并补)
特点:无序,自动去重
1.定义一个集合
setvar = {"个个","试试"}
print(setvar,type(setvar))
不可获取元素,不可修改元素
定义一个空集合
setvar = set()
2.字典类型 dict
字典里的数据以键值对的方式进行存储,表面有序,实际上无序;
在python3.6版本之后,底层做了优化,存储时,记录了字典的定义顺序
在获取字典时,把无序存储的数据拿出来,按照定义字典的字面顺序重新排序;
语法: {键1:值1,键2:值2,....}
定义一个字典
dictvar = {1:a,b:3}
获取字典中的元素
res = dictvar[1]
修改字典中的元素
dictvar[1] = 2
集合和字典之间的注意事项
集合的值和字典的键有数据类型上的要求:
允许的数据类型 (可哈希的数据类型,不可变的数据类型) :Number(int ,float ,bool,complex ),str,tuple
不允许的数据类型 (不可哈希的数据类型,可变的数据类型) : list,set,dict
(了解)
字典的键和集合的值在底层内存存储时,使用了哈希算法
哈希算法的要求是该数据类型为不可变的数据类型才能存储
哈希算法特点:无序的散列;
为什么要提出哈希算法?
为了把数据均匀的存储在内存之后,减少哈希碰撞
让数据更快的存储在内存中
同一文件下,变量的缓存机制
Number部分
1.对于整型而言,-5~正无穷范围内的相同值 id 一致
2.对于浮点型而言,非负数范围内的相同值 id一致
3.布尔型而言.值相同情况下 id 一致
4.复数在 实数+虚数 这样的结构永不相同(只有正虚数的情况列外)
容器类型部分
5.字符串 和空元组 相同的情况下 id相同
6.列表,元组,字典,集合无论什么情况下 id标识都不同[空元组列外]
总结:
无论是同一文件的缓存机制,还是不同文件的小数据池,都是为了提升执行的效率,减小空间损耗;
强制类型转换 Number (int float complex bool)
1.int的强制转换 (整型 浮点型 布尔型 纯数字字符串)
2.float的强制转换 (整型 浮点型 布尔型 纯数字字符串)
3.complex的强制转换 (整型 浮点型 布尔型 纯数字字符串 复数)
4.bool 的强制转换
没有数据类型的限制,可以转换一切数据类型;
bool => True 或者 False
布尔型为假的十种情况:
Number : 0 0.0 0j False
容器 : () '' [] {} set()
关键字 :None
none:
代表空的,一般用来对变量做初始化操作
格式: a = None b = None
自动类型转换 Number
精度从低到高
bool > int > float >complex
自动类型转换原则 :把低精度的数据向高精度进行转换;
精度损耗 (写程序时,不要用小数做比较的条件,会导致结果不准确,一般系统会把小数位截取15~18位而产生数据的误差)
容器类型的强制转换 (str list tuple set dict)
str 强制转换成字符串
特点:在原数据的两边套上引号,表达字符串的类型:可以强转一切数据
list 强制转换列表
特点:如果是字符串,把里面的内容一个个拿出来,作为列表的新元素
如果是字典,只保留字典键,值不要
如果是其他容器,就是单纯的把两边的符号换成[]
tuple 强制转换元组
特点: 如果是字符串,就是把里面的字符一个个拿出来,作为元组的新元素
如果是字典,只要字典的键,不要值
如果是其他容器,就是把两边的字符换成()
set 强制转换集合
特点: 如果是字符串,就是把里面的字符一个个拿出来,作为集合的新元素 (无序,去重)
如果是字典,只要字典的键,不要值
如果是其他容器,就是把两边的符号换成{}
dict 字典的强制转换
必须是等长的二级容器,且元素个数是2个
类型:
1.外面是列表,里面是列表或者元组
2.外面是元组,里面是列表或者元组
3.外面是集合,里面是元组
二级容器 (list tuple set dict)
等长的二级容器 (里面的元素都是容器 + 容器里面的元素个数都相同)