python
学习python的知识
写这种读书笔记从来都是写的一塌糊涂(因为我懒
1.数据类型和变量
1.1 数据类型
- 整数(普通整数:-2 147 483 648 ~ 2 147 483 647 长整数和普通整数可以混用)
- 浮点数
- 字符串:在最新的 Python 3 版本中,字符串是以 Unicode 编码的,不可变对象
- 布尔值
- 空值:空值是 Python 里一个特殊的值,用None表示。None不能理解为0,因为0是有意义的,而None 是一个特殊的空值。
列表:list 是一种有序的集合,可以随时添加和删除其中的元素,元素的数据类型也可以不同,也可以是另一个 list。
1classmates = ['Michael', 'Bob', 'Tracy']
直接获取最后一个元素:
1
classmates[-1]
追加元素到末尾:
|
|
把元素插入到指定的位置:
|
|
删除 list 末尾的元素,用pop()方法:
|
|
要删除指定位置的元素,用pop(i)方法,其中i是索引位置:
|
|
- tuple:元祖
字典:
dict 全称 dictionary,在其他语言中也称为 map,使用键 - 值(key-value)存储,具有极快的查找速度。123'Michael': 95, 'Bob': 75, 'Tracy': 85}d = {'Michael']d[95
由于一个 key 只能对应一个 value,所以,多次对一个 key 放入 value,后面的值会把前面的值冲掉。
要避免 key 不存在的错误,有两种办法,一是通过in判断 key 是否存在:
|
|
二是通过 dict 提供的 get 方法,如果 key 不存在,可以返回 None,或者自己指定的 value:
|
|
要删除一个 key,用pop(key)方法,对应的 value 也会从 dict 中删除
dict 可以用在需要高速查找的很多地方,在 Python 代码中几乎无处不在,正确使用 dict 非常重要,需要牢记的第一条就是 dict 的 key 必须是不可变对象。
set
set 和 dict 类似,也是一组 key 的集合,但不存储 value。由于 key 不能重复,所以,在 set 中,没有重复的 key。
通过add(key)方法可以添加元素到 set 中,可以重复添加,但不会有效果
通过remove(key)方法可以删除元素
set 可以看成数学意义上的无序和无重复元素的集合,因此,两个 set 可以做数学意义上的交集、并集等操作:
|
|
- 自定义数据类型
1.2 变量
没什么可说的
1.3 常量
所谓常量就是不能变的变量,比如常用的数学常数π就是一个常量。在 Python 中,通常用全部大写的变量名表示常量:
|
|
你要是非得变,谁也没办法
2. 运算
2.1 除法
在Python中,有两种除法,一种除法是/:
|
|
你没有看错,整数的地板除//永远是整数,即使除不尽。要做精确的除法,使用/就可以。
因为//除法只取结果的整数部分,所以Python还提供一个余数运算,可以得到两个整数相除的余数:
|
|
无论整数做//除法还是取余数,结果永远是整数,所以,整数运算结果永远是精确的。
在python 3.0 中,x/y 将只执行 true 除法,而与操作数无关;x//y 则执行 floor 除法
2.2 幂运算
|
|
幂运算符比取反的优先级要高
3. 列表和元组
Python最基本的数据结构是序列(sequence),六种内建序列
- 列表
- 元组
- 字符串
- Unicode字符串
- buffer 对象
- xrange对象
所有序列都可以索引/分片/加/乘/检查成员资格/计算长度/最大/最小
3.1 分片操作
|
|
步长
|
|
3.2 加
相同类型序列可以相加
|
|
3.3 乘
|
|
3.4 索引/检查成员资格/计算长度/最大/最小
- 成员资格 in:检查一个值是否在序列(或其他容器)中,对字符串是特例,可以查找子字符串。
- 计算长度 len()
- 最大 max()
- 最小 min()
什么是数据结构,什么是数据类型
int char float double 这些是 数据类型 ,类比作原子,他们间的不同就是元素种类的不同,只涉及自身的不同,比如两种原子内的质子中子数不同,是一种内在属性。
链表 队列 堆栈 树 这些是数据结构,类比作分子,他们间描述的是数据间的关系,就如同分子描述了原子的组合方式
3.5 列表
列表是可变的
3.5.1 list函数
因为字符串不能像列表一样被修改,所以有时根据字符串创建列表会很有用。list函数适用于所有类型的序列,不只是字符串。
|
|
可以用下面的表达式将一个由字符(如前)组成的列表转换为字符串:
|
|
在这里,somelist是需要转换的列表。
3.5.2 列表操作
|
|
- 删除 del names[2]
分片赋值
123456>>>name = list('Perl')>>>name['P','e','r','l']>>>name[1:] = list('ython')>>>name['P','y','t','h','o','n']分片赋值插入(删除)新元素(敲黑板,划重点)
1234>>>numbers = [1,5]>>>numbers[1:1] = [2,3,4]>>>numbers[1,2,3,4,5]
3.5.3 列表方法
- append() 在末尾追加
- count() 统计某个元素在列表中出现的次数
extend() 在末尾追加另一个序列中的多个值
12345>>>a = [1,2,3]>>>b = [4,5,6]>>>a.extend(b)>>>a[1,2,3,4,5,6]123456>>>a = [1,2,3]>>>b = [4,5,6]>>>a + b[1,2,3,4,5,6]>>>a[1,2,3]
- index()
- insert(位置,插入内容)
pop() 移除列表中的最后一个元素并返回该元素的值
pop方法是唯一一个既能修改列表又返回元素值(除了None)的列表方法
入栈,使用append
出栈,使用popremove() 移除列表中某个值的第一个匹配项,修改了列表但没有返回值
- reverse() 反向,改变了列表但不返回值
- sort() 排序[高级排序]
3. 字符串
字符串方法
- find() 查找子串,返回子串所在位置的最左端索引
- join()
- lower()
- replace()
- split()
- translate
杂七杂八
多态
对不同类的对象使用相同的操作,让用户对于不知道什么类(对象类型)的对象进行方法调用。
+
封装
封装是可以不用关心对象是如何构建的而直接进行使用,对外部世界隐藏工作细节
继承
以通用的类为基础建立专门的类对象
一个有趣的 python 排序模块:bisect
先看看模块的结构:
先说明的是,使用这个模块的函数前先确保操作的列表是已排序的。
先看看 insort 函数
其插入的结果是不会影响原有的排序。
再看看 bisect 函数:
其目的在于查找该数值将会插入的位置并返回,而不会插入。
接着看 bisect_left 和 bisect_right 函数,该函数用入处理将会插入重复数值的情况,返回将会插入的位置:
其对应的插入函数是 insort_left 和 insort_right :
reference
- 廖雪峰的官方网站
- 知乎——数据结构与数据类型
- python基础教程第二版