一、前言
今天写下关于python标准数据类型的东西,没事的时候,常回来看看。
二、六大标准数据类型
Number :(int、float、bool、complex)
容器类型 : str " "、list [ ]、tuple ( )、set { }、dict { }
python的六个数据类型中:
不可变数据类型(3个):Number(int、float、bool、complex)、 str、 tuple
可变数据类型(3个): list、 dict、 set
如何获取一个值的类型和内存地址?
res = 255
print(type(res), id(res))
# 判断一个值的数据类型
>>> res = 255
>>> isinstance = (res, int)
# type 和 isinstance 有什么区别呢?
1、Number 数字类型
>>> a, b, c, d = 20, 3.14, True, 5+4j
>>> type(a), type(b), type(c), type(d)
<class 'int'> <class 'float'> <class 'bool'> <class 'complex'>
1. int 整型 (正整数、0、负整数)
# 二进制整型
intvar = 0b10
print(intvar, type(intvar), id(intvar))
# 八进制整型
intvar = 0o22724
print(intvar, type(intvar), id(intvar))
# 十六进制整型
intvar = 0x8abcdef
print(intvar, type(intvar), id(intvar))
2. float 浮点型 (小数)
浮点型有两种表达方式:
# 1.小数
floatvar = 3.14
# 2.科学计数法
>>> floatvar = 5.1e4 # 代表将小数点右移4位
>>> floatvar
51000.0
3. bool 布尔类型
主要用于各种逻辑判断
boolvar = True
boolvar = False
print(boolvar)
4. complex 复数类型
complex 也有两种表达方式:
complexvar = 3-10j
complexvar1 = complex(3, -10)
print(complexvar, complexvar1)
"""
complex 由实数和虚数构成,如 5+3j, j是不能乱写的,那么什么是 j 呢?
如果有一个数的平方等于 -1,那么这个数就是 j
complex 主要用于科学计算中,表达了一个非常高精度的类型
"""
2、str 字符串类型
字符串用 ’ ’ 或 " " 括起来,同时使用 \ (反斜杠)转义特殊字符
strvar = "" # 空字符串,空格也是字符
# 字符串的拼接 只能进行相加或相乘的运算 注意双方都必须是字符串
>>> strvar1 = "想做你的太阳"
>>> strvar2 = "你的太阳"
>>> strvar1 + strvar2 # '想做你的太阳你的太阳'
>>> strvar1 * 3 # '想做你的太阳想做你的太阳想做你的太阳'
# 转义字符 \ + 字符
# 不管原先咋样,转完肯定不一样了
# 常见的转义字符有这么几种:
# \n, \r\n → Enter
# \t → Tab 缩进,水平制表符,4空格距离
# \r 将\r后面的字符直接拉到**当前行**行首,注意,是当前行呦。
strvar = "你好啊\n我还行" # 两行
strvar = "你\t好啊,我还行" # 你 好啊,我还行
strvar = "你好啊\r我还行" # 只打印 我还行
strvar = "你\n好\r我还行" # 打印 你 我还行
strvar = "哎呀\"我\"去" # 哎呀"我"去
print(strvar)
元字符串 原型化输出字符串
>>> strvar = r"E:\python30\day2"
>>> print(strvar)
E:\python30\day2
格式化
"""
语法: "字符串" % (值1,值2,值3)
%d 整型占位符 %2d %-2d 分别是什么意思?
%f 浮点型占位符 %.2f %.1f 分别是什么意思? 这是会四舍五入的
%s 字符串占位符
"""
>>> strvar = "%s今天打了%s,局子里拘了%d天,最后还赔了%.2f块钱,真的%s" % ("老李", "老王", 15, 250, "血亏")
>>> strvar
老李今天打了老王,局子里拘了15天,最后还赔了250.00块钱,真的血亏
3、list 列表类型
list、tuple、str均可获取且有序,但仅有list可变。
# 1.列表的索引切片,从0开始,顾头不顾尾
# list[start:end:step] step默认为1
lst = ["安度因", "古尔丹", "萨尔", "吉安娜", "瓦莉拉", "泰兰德"]
res = lst[-1] # 泰兰德
res1 = lst[1:3] # ['古尔丹', '萨尔']
res2 = lst[:4] # ['安度因', '古尔丹', '萨尔', '吉安娜']
res3 = lst[1:] # ['古尔丹', '萨尔', '吉安娜', '瓦莉拉', '泰兰德']
res4 = lst[:] # ['安度因', '古尔丹', '萨尔', '吉安娜', '瓦莉拉', '泰兰德']
res5 = lst[::2] # ['安度因', '萨尔', '瓦莉拉']
res6 = lst[::-1] # ['泰兰德', '瓦莉拉', '吉安娜', '萨尔', '古尔丹', '安度因'] 列表翻转
lst.reverse() # 列表翻转
print(lst)
print(res)
# 2.获取列表长度 len() 返回对象(字符、列表、元组等)长度或项目个数。
# 实参可以是序列(如 string、bytes、tuple、list 或 range 等)或集合(如 dictionary、set 或 frozen set 等)
>>> lst = ["安度因", "古尔丹", "萨尔", "吉安娜", "瓦莉拉", "泰兰德"]
>>> len(lst)
6
>>> str = "abcdefghigklmn"
>>> len(str)
14
# 3.列表的增删改查
>>> lst = ["安度因", "古尔丹", "萨尔", "吉安娜", "瓦莉拉", "泰兰德"]
>>> lst1 = ["卡德加"]
>>> lst.insert(3, "加尔鲁什") # 插入到任意位置
>>> lst.append("乌瑟尔") # 追加到列表尾部
>>> lst[5] = "雷克萨" # 通过下标进行修改
>>> lst.remove["古尔丹"] # 删除
>>> "玛法里奥" in lst # 判断元素是否在列表
>>> lst.extend(lst1) # extend()方法 列表合并
>>> lst.insert(2, ["雷诺", "布莱恩"]) # 列表嵌套
>>> lst.pop() # 默认删除最后一个元素,并返回被删除的值
>>> lst.pop(1) # pop(),定点删除
>>> del lst[4] # 删除
>>> lst.clear() # 清空lst
>>> lst.index("萨尔") # lst中查询"萨尔",返回从左开始匹配到的第一个"萨尔"的索引
>>> lst.count("古尔丹") # 返回"古尔丹"的个数
>>> lst.sort() # sort()列表排序
>>> for i in lst: # 列表循环 for循环
4、tuple 元组类型
元组与列表相似,写在( )里,元组里的元素不可修改,元素间用逗号隔开
# 元组虽然不可改变,但是里面却可以包含可变的数据类型,如列表
teplevar = (1, 2, 3, ["bob", "sar"])
# 构造空元组或只有一个元素的元组,有两个注意点:
tuplevar = ()
tuplevar = (2, ) # 一个元素,需要在后面加个逗号
tuplevar = 1, # 为什么这个还是元组,因为逗号是元组的标识符
# 基本操作: 索引、切片、循环、求长度、判断包含
5、set 集合类型
# 集合的特性:(作用:较差并补)
1.集合里不能存list、dict等可变类型,可存str、tuple、Number等不可变的类型;
2.天生去重;
3.无序,不能像列表一样通过索引来获取元素
# 集合的增删改查
setvar = {} # 定义一个空集合
setvar = set()
setvar = {"火车王", "玛里苟斯", "罗斯"} # 增
setvar.add("发财")
setvar.discard("罗斯") # 删除
setvar.pop() # 随机删
setvar.remove("火车王")
"玛里苟斯" in setvar # 查
# 帮列表去重
lst1 = list(set(lit))
6、dict 字典类型
# dict 的语法特点:键值对存储的数据,查询速度快,表面上有序,实际上无序。key是唯一的,value是可变的
# dictvar = {key1:value1, key2:value2, key3:value3, ...} 推荐使用命名的字符串作为dict中的key
# 为什么字典和集合都是无序的呢? 哈希算法的无序特征,字典和集合底层采用了哈希算法
"""
于此,字典的键和集合的值,有数据类型上的要求:
必须得是不可变的数据类型,不可变的数据才可哈希(Number、str、tuple)
"""
# 那为什么字典打印了很多遍,顺序也都一样呢?
# 因为python3.6版本,对字典进行了优化,存储数据的时候用的哈希算法,但是在拿出数据的时候,重新按照定义时候的顺序进行了排序
# dict的增删改查
>>> dictvar = {"猎人":"雷克萨", "牧师":"安度因", "法师":"吉安娜", "盗贼":"瓦莉拉"} # 创建
>>> {}.fromkeys([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 100)
>>> dictvar["术士"] = "古尔丹" # {'猎人': '雷克萨', '牧师': '安度因', '法师': '吉安娜', '盗贼': '瓦莉拉', '术士': '古尔丹'}
>>> dictvar
>>> dictvar.setdefault("战士", "加尔鲁什") # 增加
>>> dictvar.pop("牧师") # 删除“牧师”
>>> del dictvar["牧师"] # 删除不存在的数据会报错
>>> dictvar.popitems() # 随机删除
>>> dictvar.clear() # 清空dictvar
>>> dictvar["牧师"] = "泰兰德" # 修改
>>> dictvar.update(dic1) # 更新
>>> dictvar["key"] # 查询,不在则报错
>>> "key" in dictvar
>>> dic.get(key, default = None) # 返回字典中key对应的值,若key不存在字典中,则返回default的值(default默认为None)
>>> dictvar.keys() # 返回一个包含所有keys的列表
>>> dictvar.values() # 返回一个包含所有values的列表
>>> dictvar.items() # 返回一个包含所有(key, value)元组的列表
for k in dictvar:
print(k, dictvar[k]) # 字典循环