分类
-
数值型
- int 、float 、complex 、bool
-
序列
- 字符串 str 、bytes 、bytearray
- 列表 list 、元祖tuple
-
键值对
- 集合set
- 字典dict
数值型
-
数值型
- int 、float 、complex 、bool 都是 class,1 、5.0 、2+3j 都是对象,即实例
- int :Python3的 int 就是长整型,且没有大小限制,受限于内存区域的大小
- float :由整数部分和小数部分组成。支持十进制和科学记数法表示。C 的双精度型实现
- complex :有实数和虚数部分组成,实数和虚数部分都是浮点数,3+4.2J
- bool :int 的子类,仅有 2 个实例 True 、False 对应 1 和 0 ,可以和整数直接运算
-
类型转换(built-in)
- int(x) 返回一个整数
- float(x) 返回一个浮点数
- complex(x) 、complex(x,y) 返回一个复数
- bool(x) 返回布尔值 (False等价的对象)
数字的处理函数
- round() 四舍六入五取偶
- math 模块
- math.floor() 地板——向下取整
- math.ceil() 天花板——向上取整
- int() 截取整数部分
- // 向下取整数
### 举例 ###
print(int(-3.6), int(-2.5), int(1.4))
> -3, -2, 1
print(int(3.6), int(2.5), int(1.4))
> 3, 2, 1
print(7//2, 7//-2, -7//2,-(7//2))
> 3, -4, -4, -3
print(2//3, -2//3, -1//3)
> 0, -1, -1
print(round(2.5), round(2.5001), round(2.6))
> 2, 3, 3
print(round(3.5), round(3.5001), round(3.6), round(3.3))
> 4, 4, 4, 3
print(round(-2.5), round(-2.5001), round(-2.6))
> -2, -3, -3
print(round(-3.5), round(-3.5001), round(-3.6), round(-3.3))
> -4, -4, -4, -3
import math #导入 math 模块
print(math.floor(2.5), math.floor(-2.5))
> 2, -3
print(math.ceil(2.5), math.ceil(-2.5))
> 3, -2
- min()
- max()
- pow(x, y) 等于 x ** y
- math.sqrt() 等于 x ** 0.5
- 进制函数,返回值是字符串
- bin() 二进制
- oct() 八进制
- dec() 十进制
- hex() 十六进制
- math.pi π
- math.e 自如常数
- math 模块中还有对数函数、三角函数等
类型判断
- type(obj) ,返回类型,而不是字符串
- isinstance(obj, class_or_tuple) ,返回布尔值
### 举例 ###
type(a)
> str
type('abc')
> str
type(123)
> int
isinstance(6, str)
> False
isinstance(str, bool, int)
> ---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-248-5f3aae754034> in <module>
----> 1 isinstance(str, bool, int)
TypeError: isinstance expected 2 arguments, got 3
type(1 + True)
> int
type(1 + True + 2.0) #返回浮点数,隐式类型转换
> float
Python隐式类型转换只限数值型(int、float、complex、bool)
列表list
- 一个队列,一个排列整齐的队伍
- 列表内的个体称作元素,由若干元素组成列表
- 元素可以是任意对象(数字、字符串、对象、列表等)
- 列表内元素有顺序,可以使用索引
- 线性的数据结构
- 使用 [ ] 表示
- 列表是 可变 的
列表list:是有序的、可变数据类型
链表Linked list:在内存中不连续的分配
栈stack:有序,后进先出LIFO,Last In First Out。例如一摞盘子,拿数据的时候会拿最上面的盘子
队列queue:有序,先进先出FIFO,不能插入、删除
列表list定义 初始化
- list() -> new empty list
- list(iterable) -> new list initalized from iterable’s items
- 列表不能一开始就定义大小
- 列表是容器,可以容纳其他元素对象
列表索引访问
-
索引,也叫下标
-
正索引:从左至右,从 0 开始,为列表中每一个元素编号
-
负索引:从右至左,从 -1 开始
-
正、负索引不可以超界,否则引发异常 IndexError
-
为了理解方便,可以认为列表是从左至右排列的,左边是头部,右边是尾部,左边是下界,右边是上界
-
列表通过索引访问
- list[index] , index 就是索引,使用中括号访问
列表查询
- index(value, [start, [stop]])
- 通过value ,从指定区间查找列表内的元素是否匹配
- 匹配第一个就立即返回索引
- 匹配不到,抛出异常 ValueError
- count(value)
- 返回列表中匹配 value 的次数
- 时间复杂度
- index 和 count 方法都是 O(n)
- 随着列表数据规模的增大,而效率下降
列表元素修改
- 索引访问修改
- list[index] = value
- 索引不要超界
列表增加、插入元素
-
append(object) -> None
- 列表尾部追加元素,返回None
- 返回None就意味着没有新的列表产生,就地修改
- 时间复杂度是 O(1)
-
insert(index, object) -> None
- 在特定的索引 index 处插入元素 object
- 返回 None就意味着没有新的列表产生,就地修改
- 时间复杂度是 O(n)
- 索引——超越上界,尾部追加;超越下界,头部追加
-
extend(iterable) -> None
- 将可迭代对象的元素追加尽量,返回 None
- 就地修改
-
+ -> list
- 连接操作,将两个列表连接起来
- 产生 新 的列表,原列表不变
- 本质上调用的是魔术方法 add() 方法
-
星号 * -> list
-
重复操作,将本列表元素重复 n 次,返回 新 的列表
列表删除元素
-
remove(value) -> None
- 从左至右查找第一个匹配 value 的值,找到就移除该元素,并返回 None , 否则 ValueError
- 就地修改
- 时间复杂度 O(n)
-
pop([index]) -> item
- 不指定索引 index ,就从列表尾部弹出一个元素
- 指定索引 index ,就从索引处弹出一个元素,索引超界抛出 IndexError 错误
- 时间复杂度 O(n)
-
clear() -> None
- 清除列表所有元素,剩下一个空列表
列表其他操作
-
reverse() -> None
-
将列表元素 反转 ,返回 None
-
就地修改
-
sort(key=None, reverse = False) -> None
- 对列表元素进行排序,就地修改,默认 升序
- reverse 为 True ,反转,降序
-
key 一个函数,指定 key 如何排序
- lst.sort(key=function)
列表复制
- copy() -> list
- shadow copy 返回一个新的列表
- shadow copy
- 影子拷贝,也叫浅拷贝,遇到引用类型,只是复制了一个引用而已
- 影子拷贝,也叫浅拷贝,遇到引用类型,只是复制了一个引用而已
- 深拷贝
- copy 模块提供了 deepcopy
随机数
- random 模块
- randint(a, b) 返回 [a, b] 之间的整数
- choice(seq) 从非空序列的元素中随机挑选一个元素,比如 random.choice(range(10)) ,从 0 到 9 中随机挑选一个整数。random.choice([1, 3, 5, 7])
- randrange([start, ],stop [,step]) 从指定范围内,按指定基数递增的集合中获取一个随机数,基数缺省值为 1 。random.randrange(1, 7, 2)
- random.shuffle(list) -> 就地打乱列表元素
- sample(population, k) 从样本空间或总体 (序列或者集合类型)中随机取出 k 个 不同的元素 ,返回一个新的列表