Python 基本类型及方法

2015-08-25

内建 6 种序列

列表、元组、字符串、Unicode 字符串、buffer 对象、xrange 对象。

正文序列类型 str

字符串有穷序列 不可变 immutable。
操作:求长度,取成员,切字串(切片),查找字串,判断成员字符类型。
基于已有字符串构造新串:改变大小写,拼接, 格式化,字串替换,切片。

字符串方法

join() split()

互为逆方法,作用分别为在字符串序列中规律添加元素,在字符串中删除规律元素,将字符串分割成单个序列:

1
2
3
4
5
6
7
8
9
>>> seq = ['1', '2', '3', '4', '5']
>>> sep = "+"
>>> sep.join(seq)
1+2+3+4+5

>>> '1+2+3+4+5'.split(’+‘)
['1', '2', '3', '4', '5']
>>> 'Using the default'.split()
['Using', 'the', 'default']

不带任何参数的 split(),所有空格符(空格,Tab,换行)都分隔开。还有其他方法:lsplit,rsplit

其他操作

  • input() raw_input()
  • + 拼接字符串, 字符串表示 str 和 repr,将值转换为字符串的两种机制,一个是使用 str() 函数转换成合理形式的字符串,repr() 是创建一个字符串,以合法到的 Python 表达式形式来表示值。
  • 长字符串可用三个引号代替普通括号;原始字符串,需要显示路径需要很多的斜杠,不想要用太多转义符的地方,以 r 开头,如 r'/User/Chen/PythonProjects';Unicode 字符串以 u 开头,用 decode()encode() 进行解码。
  • 字符串格式化 % ,设置宽度精度,左右对其,填充0
  • 替换 ,translate() 处理单个字符,可同时进行,replace() 替换所有匹配项
  • strip() 返回去除两侧(不包括内部)空格的字符串,lstrip() rstrip() 左右。

序列类型 list tuple

通用序列操作:索引,切片,加,乘,检查成员资格,长度,最大值,最小值。还有个最重要的操作迭代,以后单独讲。

列表 可变 mutable

任意元素序列,支持所有共有的序列操作。
所有可变序列操作(改变当前列表):元素替换(复制),切变,替换/删除,元素插入删除。

切片

  • 切片区间是左闭右开;支持负索引
  • 最后一个元素是 -1
  • 复制整个列表左右索引都为空,前索引后索引可有一个为空
  • 默认步长为 1,大于 1 的步长如 4,指的是每 4 个元素的第一个,负数步长就是反过来提取。
  • a[1, 2, 3, 4, 5]:取偶数位置:a[1::2],从索引 1 开始,取每两个元素的第一个

基本操作

  • 序列相加(返回新序列,不改变原序列);乘法,*;返回新序列;成员资格,in/not in;长度,最小值,最大值。
  • 通过索引、切片改变列表,元素赋值,删除元素使用 del 语句。
  • list() 函数,适用于所有类型的序列。

列表方法

  • append() 在末尾追加新的对象
  • count() 统计某元素出现的次数
  • extend() listB.extend(listB)在末尾一次性追缴另一个列表中的多个值,原位置操作(in-place operation)
  • index() 匹配元素的第一个索引值
  • insert() insert(3, “insert”),在原序列索引 3 前插入元素,等价于切片赋值 list[3:3] = “insert”
  • pop() 移除最后一个元素,并返回,可以 用来实现栈这个数据结构,后进先出,LIFO
  • remove() 移除第一个匹配项
  • reverse() 将元素反向存放
  • sort() 原位置排序

元组 不可变 无方法

任意元素有穷序列,一个元组的成员可以为不同类型的对象 序列共有操作:成员判断(in, not in),取元素/切片,和长度,元素检索/计数,最大/最小,拼接/重复拼接(产生新序列)。
不变序列唯一特殊操作 hash,从任意个不变序列产生一个整数。
不变序列可作为字典的关键码,可作为 set/forzenset 的元素。

集合类型 set forzenset

任意满足条件的元素的汇集。
forzenset 支持所有不变集合操作:元素个数,元素判断,集合之间的关系(包含/香蕉),集合运算(并/交/差/对称差)。
set 还支持可变集合操作,修改集合的运算(并/交/差/对称差),加入/删除元素
集合的元素只能至不可变对象,可求出 hash 值。

映射类型 dict

字典 一组关键码到一组值的映射。
基本操作:添加键值对,检索键值对。
其他操作:元素个数,键存在,元素删除(基于键),其它修改字典的操作。

字典基本操作

长度,将值关联到键上,依据键取值,依据键删除键值对,依据键检查键值对是否存在于字典中。

字典和列表的区别:

  • 键类型:整型,浮点,字符串,或元组等任何不可变类型
  • 自动添加:键不存在于字典中,可以为其分配一个默认值,列表 append() 方法不能在索引之外简历新项。
  • 成员资格:for k in d 依据键查找字典中的键值对,for v in l 查找列表中的值。

字典方法

  • dict() 用键值对或者映射和关键字参数简历字典
  • clear() 清除字典中所有项,原地操作,无返回值。
  • copy() 浅拷贝(shallow copy),返回一个键值对一样的字典,值就是本身,和深拷贝(deep copy)还是有区别的,用深拷贝的情况较多,后面单独讲。
  • fromkeys() 依据给定的键简历新的字典,默认值为 None,也可以自己指定默认值。
  • get() 宽松的访问字典项方法,访问不存在的键,返回默认值 None,也可指定默认值。
  • has_key() 检查是否有给定的键。
  • items() 和 iteritems() items() 将字典项以列表的形式返回,无序;iteritems() 返回一个迭代器对象,更为高效,迭代器对象可以用来进一步筛选操作。
  • keys() iterkeys() 和上面一样,分别返回键的列表和迭代器。
  • values() itervalues() 分别返回值的列表和迭代器。
  • pop() 移除给定键的键值对,并返回。
  • popitem() 移除随机一个键值对,并返回。
  • setdefault() 获得给定键的值,不存在时设定键值,默认值 None。
  • update() 用一个字典更新另一个字典,相同键会覆盖。

其他数据结构

deque