Python基础(杂项)

笔记

字符串与编码

  1. 含有中文的 str 无法用 ASCII 编码,因为中文编码的范围超过了 ASCII 编码的范围,Python 会报错
  2. ord() 函数获取字符的整数表示,chr() 函数把编码转换为对应的字符
  3. bytes 类型的数据用带 b 前缀的单引号或双引号表示,例: x = b’ABC’
  4. 在 bytes 中,无法显示为ASCII字符的字节,用 \x## 显示。
  5. 以 Unicode 表示的 str 通过 encode() 方法可以编码为指定的 bytes;把 bytes 变为str,用 decode() 方法
  6. 如果 bytes 中只有一小部分无效的字节,可以传入 errors=‘ignore’ 忽略错误的字节:
 >>> b'\xe4\xb8\xad\xff'.decode('utf-8', errors='ignore')
     '中'
  1. len() 函数计算的是 str 的字符数,如果换成 bytes,len() 函数就计算字节数:
>>> len(b'ABC')
3
>>> len(b'\xe4\xb8\xad\xe6\x96\x87')
6
>>> len('中文'.encode('utf-8'))
6

1个中文字符经过 UTF-8 编码后通常会占用3个字节,而1个英文字符只占用1个字节

list 与 tuple

  1. List 集合用 [ ] 表示,tuple 用( )表示
  2. 若用负数作为索引,则以倒序开始获取集合元素
  3. 删除 list 末尾的元素,用 pop() 方法,删除指定位置用 pop(i) 方法,其中 i 是索引位置
  4. 在 tuple 里指定义一个元素时,必须加一个逗号来消除歧义
>>> t = (1,)
>>> t
(1,)

循环

  1. for … in 循环,依次把 list 或 tuple 中的每个元素迭代出来
names = ['Michael', 'Bob', 'Tracy']
for name in names:
    print(name
  1. range() 函数生成一个整数序列, range(x) 生成从 0 开始小于 x 的整数,再可以用 list() 函数转换为 list

dict 与 set
dict:

  1. 使用键-值(key-value)存储,具有极快的查找速度
  2. 一个 key 只能对应一个 value,所以,多次对一个 key 放入 value,后面的值会把前面的值冲掉
  3. 要避免 key 不存在的错误,有两种办法,一是通过 in 判断 key 是否存在:
>>> 'Thomas' in d
False

二是通过 dict 提供的 get() 方法,如果 key 不存在,可以返回 None,或者自己指定的value:

>>> d.get('Thomas')
>>> d.get('Thomas', -1)
-1
  1. 删除一个key,用 pop(key) 方法,对应的 value 也会从 dict 中删除
  2. 与 list 比较,dict 有以下几个特点:
    查找和插入的速度极快,不会随着 key 的增加而变慢;
    需要占用大量的内存,内存浪费多。
    而 list 相反:
    查找和插入的时间随着元素的增加而增加;
    占用空间小,浪费内存很少。
  3. 在 Python 中,字符串、整数等都是不可变的,可以作为 key。而 list 是可变的,所以不能作为 key

set:

  1. set 也是一组 key 的集合,但不存储 value。由于 key 不能重复,所以在 set 中,没有重复的 key。
  2. 创建一个 set,需要提供一个 list 作为输入集合
>>> s = set([1, 2, 3])
>>> s
{1, 2, 3}
  1. 重复元素在 set 中自动被过滤
  2. add(key) 方法可以添加元素,可以重复但是没效果;remove(key) 方法可以删除元素
  3. set 可以看成数学意义上的无序和无重复元素的集合,因此,两个 set 可以做数学意义上的交集、并集等操作
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章