数据类型
存储单位
- 最小单位是
bit
,表示一位二进制的0或1,一般写作’b’,是网路数据传输的单位 - 最小的存储单位是字节, 用
byte
表示,一般写作’B’,1B = 8b - 1024B = 1KB
- 1024KB = 1MB
- 1024MB = 1GB
- 1024GB = 1TB
- 实例:2^32 = 2^10 * 2^10 * 2^10 * 2^2 = 4GB
进制转换
- 十进制:
- 基数0~9,逢10进1
- 示例:123 = 1 * 10^2 + 2 * 10^1 + 3 * 10^0 = 100 + 20 + 3 = 123
- 二进制:
- 基数0和1,逢2进1
- 示例:0b110100 = 2^5 + 2^4 + 2^2 = 32 + 16 + 4 = 52
- 十进制转二进制:除2取余,倒序书写
- 22 = 0b10110
- 八进制:
- 基数0~7,逢8进1
- 示例:0o123 = 1 * 8^2 + 2 * 8^1 + 3 * 8^0 = 64 + 16 + 3 = 83
- 八进制转二进制:八进制的1位表示3位的二进制数
- 0o123 = 0b 001 010 011
- 十六进制:
- 基数0~9、A-F,逢16进1
- 示例:0xAB = 10 * 16^1 + 11 * 16^0 = 160 + 11 = 171
- 十六进制转二进制:十六进制的1位 表示4位的二进制数
- 0xABC = 0b 1010 1011 1100
- 计算机中的数据是以哪种进制存储的?为什么?
- 二进制,因为计算机在设计时只识别二进制。具体原因:
- 稳定性高(0和1)、成本低(技术上容易实现)、与生活中的真假逻辑相吻合(易于解决生活中的问题)
- 计算机中的数据是如何表示的?
- 如何表示负数?
- 最高位作为符号位:0表示正数,1表示负数
- 虽然牺牲了最高位,但是可以解决负数的表示问题,简化了硬件设计成本
- 原码反码和补码:是针对负数而言的(正数的三码一致)
- 负数的反码等于原码的符号位不变,数据位取反
- 负数的补码等于反码加1
- 计算机中的数据都是以补码的形式表示的
数据类型
说明:不同的数据类型都是为了解决生活中的实际问题而出现的,而且每种类型都有相关的运算。
python中常见数据类型:整型、浮点、布尔、字符串、列表、元组、集合、字典等
整型(int):就是数学中的整数
浮点(float):就是数学中的小数
# 浮点 b = 3.14 print(b, type(b)) # 科学计数法 c = 3.1415e-3 print(c)
复数(complex):了解
# 复数 d = 3 + 5j print(type(d))
布尔(bool):对应于生活中的真假逻辑,只有两个值
True/False
空(NoneType):空类型,只有一个值
None
字符串(str):使用引号括起来的一串字符
- 定义:单引号、双引号、三个单引号、三个双引号都可以
- 转义:使特殊意义的字符失去原有的意义,变成普通字符,使用’\’处理
- 特殊字符:’\n’、’\t’、’\r’
- 原始字符:在定义字符串的格式前添加一个字符’r’即可,所有的字符都变成了普通字符
列表(list):通过[]进行定义,可以存储一系列的任意数据,是容器类型。
lt = [1, 'hello', 3.14] print(lt, type(lt)) # 通过下标获取元素,下标是从0开始的 print(lt[0]) # 存在越界问题 # print(lt[3])
元组(tuple):通过()进行定义,可以作为容器存储任意数据,元组是不可修改的。
tp = (1, 2, 3) print(tp, type(tp)) # 也是通过下标访问元素 print(tp[0]) # 定义单个元素的元组,不要忘记后面的逗号 tp = (1,)
集合(set):通过{}进行定义,也可以作为容器存储任意数据,但是元素不会重复,是无需的。
s1 = {'李白', '杜甫', '白居易', '骆宾王', '苏轼', '李白'} s2 = {'李白', '王安石', '王维'} print(s1, type(s1)) # 交集 print(s1 & s2) # 并集 print(s1 | s2) # 差集 print(s1 - s2) print(s2 - s1) # 定义空集合,不能使用{},应该使用set() # {}是定义空字典的 # s = {} s = set() print(type(s))
集合经常用于去重操作。
字典(dict):通过{}进行定义
- 元素是由键值对组成的
- 键和值之间使用’:’连接
- 键必须是唯一的,值可以是任意的
- 字典中的键值对可以更改
- 示例:
d = {'name': 'ergou', 'age': 20} print(d, type(d)) # 根据键获取值 print(d['name']) # 直接根据键获取值,当键不存在时会报KeyError错 # print(d['height']) # 通过get方法,根据键获取值,有就返回值,没有返回None print(d.get('height')) # 通过get还可以设置默认值 print(d.get('weight', 90)) # 统计元素个数 print(len(lt)) # 对于字典表示的时键值对的个数 print(len(d))
类型转换
隐式类型转换:混合运算、条件判断等场景
强制类型转换:使用专门的函数进行转换
int:转换为整型,base是用来指明参数的进制类型 float:转换为浮点数 str:转换为字符串 list:转换为列表 tuple:转换为元组 set:转换为集合 dict:转换为字典
示例:
# 转换为整型 # a = int(3.84) # base:指明参数的进制类型 a = int('123', base=8) print(a, type(a)) b = int(True) print(b) # 浮点 c = float(250) print(c, type(c)) # 字符串 d = str(123) print(d, type(d)) # 列表 e = list('hello') e = list((1, 2, 3)) e = list({1, 2, 3}) # 也可以转换,但是只保留键 e = list({'name': 'goudan', 'age': 18}) print(e, type(e)) # 元组 f = tuple(['小芳', '小敏', '小马']) print(f, type(f)) # 集合 g = set(['小杜', '小王', '小杜']) print(g, type(g)) # 字典 lt = [('name', 'dahua'), ('age', 18)] h = dict(lt) print(h, type(h))
字符串操作
示例:
s1 = 'hello' s2 = 'world' # '+'可以直接将字符串拼接在一起 s3 = '(' + s1 + ' ' + s2 + ')' print(s3) # '*'可以重复指定的内容 s4 = s1 * 3 print(s4) # 统计字符个数 print(len(s4)) s = 'abcdefg' # 从前面开始提取,下标从0开始 print(s[0]) # 从结尾开始提取,下标从-1开始 print(s[-1]) # 切片 # 包括起始下标,不包括结束下标,默认步进值为1 print(s[1:3]) # 当一边的边界不指定时,提取到该边界 print(s[:4]) print(s[2:]) print(s[1:-2]) print(s[-3:]) print(s[:-2]) print(s[:]) # 完整写法:[起始:结束:步进] print(s[::2]) # 逆序 print(s[::-1])
练习:
- 列表、元组等的切片操作