分类
- 数值型:int、 float、 complex、 bool
- 序列对象:字符串 str、列表lis、ttuple
- 键值对:集合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等价的对象
列表list
一个队列,一个排列整齐的队伍
列表内的个体称作元素,由若干元素组成列表
元素可以是任意对象(数字、字符串、对象、列表等)
列表内元素有顺序,可以使用索引
线性的数据结构
使用 [ ] 表示
列表是可变的
列表list、链表、 queue、 stack的差异
列表list定义 初始化
list() -> new empty list
list(iterable) -> new list initialized from iterable’s items
列表不能一开始就定义大小
lst = list()
lst = []
lst = [2, 6, 9, ‘ab’]
lst = list(range(5))
列表索引访问
索引,也叫下标
正索引:从左至右,从0开始,为列表中每一个元素编号
负索引:从右至左,从-1开始
正负索引不可以超界,否则引发异常IndexError
为了理解方便,可以认为列表是从左至右排列的,左边是头部,右边是尾部,
左边是下界,右边是上界
列表通过索引访问
list[index] , index就是索引,使用中括号访问
列表查询
- index(value,[start,[stop]])
通过值value,从指定区间查找列表内的元素是否匹配
匹配第一个就立即返回索引
匹配不到,抛出异常ValueError - count(value)
返回列表中匹配value的次数 - 时间复杂度
index和count方法都是O(n)
随着列表数据规模的增大,而效率下降
列表增加、插入元素
- append(object) -> None
列表尾部追加元素,返回None
返回None就意味着没有新的列表产生,就地修改
时间复杂度是O(1) - insert(index, object) -> None
在指定的索引index处插入元素object
返回None就意味着没有新的列表产生,就地修改
时间复杂度是O(n)
索引能超上下界吗?
超越上界,尾部追加
超越下界,头部追加
列表增加、插入元素
- extend(iteratable) -> None
将可迭代对象的元素追加进来,返回None
就地修改 -
- -> list
连接操作,将两个列表连接起来
产生新的列表,原列表不变
本质上调用的是__add__()方法
- -> list
-
- -> list
重复操作,将本列表元素重复n次,返回新的列表
- -> list
列表删除元素
- remove(value) -> None
从左至右查找第一个匹配value的值,移除该元素,返回None
就地修改
效率? - pop([index]) -> item
不指定索引index,就从列表尾部弹出一个元素
指定索引index,就从索引处弹出一个元素,索引超界抛出IndexError错误
效率?指定索引的的时间复杂度?不指定索引呢? - clear() -> None
清除列表所有元素,剩下一个空列表
随机数
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) ->None 就地打乱列表元素
sample(population, k) 从样本空间或总体(序列或者集合类型)中随机取出k个不同的元
素,返回一个新的列表