Python随学随记(3)—— 序列类型(字符串、列表、元祖)

序列类型

  1. 序列的每一个元素可以通过指定一个偏移量(切片)的方式得到
  2. 标准序列类型操作符:成员[not]in、重复*、连接+、下标访问[x]
  3. +连接字符串不如用join()方法,后者更节约内存;连接列表用extend()方法更省
  4. 在序列中可以用None作为索引值,显示所有
  5. 一旦一个Python的对象被建立,我们就不能更改其身份或类型(用操作符操作时创建浅拷贝)
  6. 浅拷贝:简单说就是只拷贝了对对象的索引
  7. 常见序列转换函数: list() str() unicode() tuple() basestring()(抽象工厂函数,为str和unicode提供父类)
  8. 常见序列类型内建函数(BIF):len() reversed() sum() enumerate() max()/min() sorted() sum() zip()

字符串

  1. 字符串之间进行比较时,是用ASCII值的大小来比较的
  2. 重复操作作为参数放到循环里面进行是非常低效
  3. for里的else只在循环完整结束并没有碰到break时执行
  4. python中允许在源码中把几个字符串连在一起写,以此来构建新字符串
  5. 字符串的格式化操作符%支持两种参数输入方式: 元祖 字典
  6. 字符串模板: 使用${name}占位生成Template对象,再用Template对象的substitute(name='xxx')/safe_substitute()方法
  7. 原始字符串操作符:r/R,靠在第一个引号前,使字符不转义
  8. 常用字符串方法:
    解码字符串:string.decode() 编码字符串:string.encode()
    计数:string.count() 查找:string.find()/index()
    合并:string.join() 替换:string.replace()
    去空格:string.strip() 分割切片:string.split()
    反大小写:string.swapcase() 检查开头结尾:string.startswith()/endswith()
  9. 转义字符常见: \t \n \" \' \\ 响\a 退\b 纵\v 换\f 回\r 转\e
  10. UCS:通用字符集
    UTF: Unicode或UCS的转换格式(Unicode采用多字节 UTF-8:1-4个字节)
  11. string模块已经不推荐使用,只保留了ASCII的支持, 在需要跟Unicode兼容的代码里都不要使用;
    Unicode字符串是UnicodeType类型
  12. 如果一个对象定义了__unicode__()方法, 可以将该对象转换成相应的Unicode字符串
  13. ASCII字符的UTF-8编码和ASCII编码相同
  14. 每当你向一个文件写入字符串的时候,你必须定义一个编码用于把对应的Unicode内容转换成你定义的格式(python中用encode())
  15. codec是COder/DECoder的首字母组合,定义了文本跟二进制的转换方式
  16. 处理Unicode规则:
    字符串加前缀u;
    不用str()unicode();
    不用string模块;
    不随便使用encode()/decode()

列表和元祖

  1. 列表是能保留任意数目对象的灵活容器
    列表BIF: append() remove() pop() extend() count() index() insert() reverse() sort(func, key, reverse)
    列表(大部分元祖也适用)常用操作符: 切片 成员关系 连接
  2. 用extend()方法连接实际上是把新列表添加到原有的列表里面,而连接操作符(+)则是新建一个列表;
    该方法也常用于复合赋值运算(+=),支持任何可迭代对象
  3. 列表可以使用大部分的对象和序列类型的操作符,列表有个特性是 列表解析(结合了列表的方括号和for循环)
  4. cmp()的关键点: 同类型:比较值;不同类型:若都是数、若一方是数、不然按类型名的字母顺序比;len长则大
  5. 可以用max/min()对只包含数字和字符串对象的列表进行取特定值操作
  6. 注意字符串排序使用的是字典序,而不是字母序(例如”T”的ASCII码值要比字母’a’的还要靠前)
  7. sum(seq, init=0)效果等于reduce(operator.add, seq, init)
  8. tuple()/list()转换时,得出的结果虽然和原对象有着相同的数据集合, 但是变量指向的却不是同一个对象
  9. 如果index()的元素不存在于列表中,则会报错,因此在之前应有检查(比如in)
  10. 改变对象值的可变方法是没有返回值的(如sort, extend, reverse),字符串有(因为不可变,所以必须返回一个新的对象)
  11. sorted()reversed()与没d的不同之处:可以用作表达式,它们返回一个对象,原列表不变
  12. sort()方法默认的排序算法是 归并排序(timsort)的衍生算法,时间复杂度是:O(lg(n!))
  13. 堆栈是一个后进先出(LIFO)的数据结构,类似放餐盘,术语push指把一个对象添加到堆栈中(pop)
  14. 队列是一种先进先出(FIFO)的数据类型,类似银行排队
  15. 元祖常做字典的key,另外当处理一组对象(多对象)时,得到的结果默认是元祖类型
  16. 可以把列表作为元祖的元素, 可以实现元祖的”可变”
  17. 在定义单个元祖的操作时如果不加逗号会被当作分组操作,而不是元祖的分界符
  18. 序列类型相关模块:
    array, copy, operator, re, types, 长字符串操作cStringIO/StringIO,
    包装文本textwrap, 高性能容器数据类型collections
  19. 浅拷贝:创建了一个类型跟原对象一样,内容是原对象元素的引用(即对象本身是新的,内容不是)
    实行方法:完全切片方法、工厂函数、copy.copy()函数
  20. 深拷贝:即创建一个新的容器对象, copy.deepcopy()
  21. 拷贝注意:
    a)非容器类型没有被拷贝一说,浅拷贝是用完全切片来完成
    b)如果元祖变量只包含原子类型对象,深拷贝无效
  22. 把相同的词汇或句子, 在下文中调换位置或颠倒过来, 产生首尾回环的情趣, 叫做回文, 也叫回环
  23. 元祖既可以被分解成为单独的变量, 也可以直接用单一变量对其进行引用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值