python 数据类型
单位换算
-
最小的单位为bit,表示一个二进制的0或1,一般使用小写的b表示
-
存储的最小单位为字节(Byte),1B = 8b
-
1024B = 1KB
-
1024KB = 1MB
-
1024MB = 1GB
-
1024GB = 1TB
-
1024TB = 1PB
-
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,python中以'0b'开头
-
示例:0b110100 = 2^5 + 2^4 + 2^2 = 32 + 16 + 4 = 52
-
十进制转二进制:除2取余,倒序书写
-
22 = 0b10110
-
-
-
八进制
-
基数0~7,逢8进1,python中以'0o'开头
-
示例: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,python中以'0x'开头
-
示例: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(type(b)) # 科学计数法 c = 3.14e-3 print(c)
-
布尔(bool):与生活中的真假逻辑相对应
# bool类型,只有两个值,True和False d = False print(type(d))
-
空(NoneType):是一个特殊的类型,只有一个值(None)
-
字符串(str):用引号括起来的一串字符
-
单引号或双引号都可以,也可以使用三个单引号或双引号
-
单引号中的双引号及双引号中的单引号都需要转义
-
转义字符:换行(\n)、制表(\t)等
-
有时'\'也需要转义
-
-
一行显示不完时,换行处理
g = 'hello' \ ' world' print(g) h = 'hello \ world' print(h) i = ''' abc def 123 ''' print(i)
-
统计字符个数
# 无论什么字符,都是一个长度 s = 'hello你好' print(len(s))
-
字符串拼接
# 直接拼接 s2 = 'hello' + 'world' print(s2)
# 指定的字符串重复若干次,然后拼接一起 s3 = 'abc' * 3 print(s3)
-
提取单个字符
s4 = '123456' # 从开头提取,下表从0开始 print(s4[0]) # 从末尾提取,下表从-1开始 print(s4[-2])
-
字符串切片(提取一段)
s5 = 'abcdefg' # s[起始下表:结束下表],包括起始下表元素,不包括结束下表元素 print(s5[0:3]) # 从开头提取到指定位置 print(s5[:4]) # 从指定下表提取到结尾 print(s5[3:]) # 下表为1开始,提取到倒数第二个,不包括倒数第二个 print(s5[1:-2]) # 提取最后4个字符 print(s5[-4:]) # 提取全部 print(s5[:]) # 指定步进值,默认为1 print(s5[::2]) # 字符串逆序 print(s5[::-1])
-
格式化
name = 'goudan' like = 'wangdahua' age = 18 print('我叫%s,暗恋%s,她今年%d岁了' % (name, like, age)) # 字符 => ASCII print(ord('a')) # ASCII => 字符 print(chr(65)) print('我叫{},喜欢{},今年{}岁了'.format(name, like, age)) print('我叫{2},喜欢{1},今年{0}岁了'.format(name, like, age)) print('我叫{nm},喜欢{lk},今年{a}岁了'.format(nm=name, lk=like, a=age))
-
> %s:给字符串占位的
>
> %d:给整型数据占位
>
> %f:给浮点数占位
>
> %c:给字符占位
>
> • ASCII:
>
> • 0~9:48~57
>
> • A~Z:65~90
>
> • a~z:97~122
- 列表(list):通过[]定义,里面可以存放任意类型的数据
- 取值:lt[0]、lt[-1]
- 列表是可以修改的,lt[1] = '小敏'
- 存在越界问题
- 也可以进行 '+' 和 '*' 的运算
- 也可以进行切片操作
- lt[:] = [],表示清空列表
- lt[:2] = [],删除前两个元素
- 元组(tuple):通过()定义,其他操作与列表相同
- 元组不可修改
- 当只有一个元素时,元素后要添加一个逗号
- 集合(set):使用{}定义,
- 空的集合不能使用大括号定义(留给字典用的),使用set()定义
- 集合是不可修改
- 集合中的元素时无序的
- 集合中的元素不能重复
- 简单使用
```python
s = {'李白', '杜甫', '白居易', '苏轼', '陶渊明', '李白'} s2 = {'李白', '李商隐', '杜牧', '苏轼'} print(type(s)) print(s) # 交集 print(s & s2) # 并集 print(s | s2) # 差集 print(s - s2) print(s2 - s)
# 空的集合这样定义,不能使用{}
s3 = set() print(type(s3))
-
字典(dict):通过{}定义
-
元素是由键值对组成的
-
键和值之间使用':'连接
-
字典中的键是唯一的,值可以是任意的
-
字典是可变的
-
简单使用:
d = {'name': 'xiaoming', 'age': 18} print(d) print(type(d)) # 根据键提取对应的值 print(d['name']) # 键不存在时会报错 # print(d['abc']) # 键存在返回对应的值,键不存在返回None,也可以自定义默认值 print(d.get('abc', '默认值')) # 没有则添加键值对 # d['hello'] = 'world' # 已存在则修改 d['name'] = 'xiaofang' # 删除元素 # del d['name'] # print(d) # len返回的是键值对的个数 print(len(d))
-
-
强制类型转换
int() # 转化为整型
float() # 转换为浮点数
str() # 转换字符串
list() # 转换为列表
tuple() # 转换为元组
set() # 转换为集合
dict() # 转换为字典
l = [('name', 'xiaoming'), ('age', 18)] # 将列表转化为字典 d1 = dict(l) print(d1)
列表的去重,列表 => 集合 => 列表
-
获取变量地址
a = 10 print(id(a))
不必深究变量的地址问题