基本类型包括:数字型(int、float、complex)、布尔型(0、1、空值、True、False)
容器包括:序列(string、list、tuple)、映射(dict),以及集 set(). 其中 序列都是有序的,字典默认是无序的。有序字典为 OrderedDict 类.

序列之通用方法

索引取值、赋值list_obj[index]

  1. # ✅
  2. a = ['hello']
  3. print(a[0]) ### 输出索引位 0 的值,即第 0 位的值 “hello”
  4. print(a[-1])
  5. b = ['h', 'e', 'l', 'l', 'o']
  6. a[0] = 'y'
  7. print(a) ### 输出结果为 ['y', 'e', 'l', 'l', 'o']
  8. # ❌
  9. a = ['hello']
  10. print(a[1]) ### 索引越界报错

获取索引位index()

通过形如 a[1] ,假设 a 是一个列表,可以获取到索引位 1 上的值 相反地,获取列表对象具体值第一次出现的索引位,可以通过 index() 方法

  1. a = ['hello', 'world', 'hello']
  2. a.index('hello') ### 输出了索引位 0

切片拷贝 [:]

在有些情况下,我们不希望改动原列表对象的值,可以借助索引取值做全拷贝

  1. a = [1, 2, 3]
  2. b = a[:] ### 切片表达式[:] 意为以 [start_index : end_index : step=1] 进行全量复制
  3. c = a ### 同一对象判断 a is c 将为真
  4. a[0] = 9
  5. print(a, b) ### a为 [9, 2, 3], b为 [1, 2, 3]

成员资格 in

运算符 in 用于检查指定对象是否是序列或其他集合的成员

  1. a = "checkout"
  2. 'o' in a ### True
  3. 'z' in a ### False

拼接 +

拼接必须是同样的数据类型

  1. # ✅
  2. a = ['1', '2']
  3. b = [3]
  4. c = a + b
  5. print(a, b, c) ### 拼接后是一个新的副本,a、b 并没有被修改
  6. # ❌
  7. a = ['1', '2']
  8. b = 3
  9. print(a + b) ### 此时会报错。因为 a 的类型是列表,b 为数值型(整型)

获取序列长度len()

  1. a = ['hello']
  2. b = ['h', 'e', 'l', 'l', 'o']
  3. print(len(a), len(b)) ### 输出的长度为 1 和 5

序列之 List 列表

形如由函数 list()转换或声明的,或由方括号[]包裹的有序对象即列表 列表是有限长度,索引位从 0 开始,-1表示从右开始;当索引越界时将抛错 列表是可变序列,且与 Java 等语言中的数组不同,Python列表可以存储不同类型的数据

定义列表

  1. # 将字符串序列转化成列表
  2. v = "hello"
  3. a = list(v)
  4. # 声明一个列表
  5. b = list()
  6. c = []
  7. # 声明一个长度 10 的空列表
  8. d = [None]*10

常用方法与 API

追加append()

append() 用于将一个对象附加到列表末尾,方法为原地修改,且不返回值 (严格意义来说返回了 None)

  1. a = ['a', 1]
  2. a.append(3) ### 此时 a == ['a', 1, 3]

扩展extend()

extend() 能够同时将多个值附加到列表末尾,方法为原地修改

  1. a = [1, 2, 3]
  2. b = [4, 5, 6]
  3. a.extend(b)

插入insert()与删除pop()remove()

方法 insert 用于将一个对象值插入列表 方法 pop 用于将列表对应的元素,默认为末端元素。删除后将返回该删除的元素 方法 remove 用于删除第一个指定值的元素,且为原地操作,同时不返回结果

  1. a = [1,2,4,5,1,1]
  2. a.insert(2,'three') ### a 为 [1, 2, 'three', 4, 5, 1, 1]
  3. a.pop() ### 返回为末端删除的元素 1
  4. a.remove(1) ### a 为 [2, 'three', 4, 5, 1]
  5. a.pop(1) ### 返回为删除第1索引位的元素 'three'

排序 sort()sorted(List)与反序 reverse()

方法 sort 为原地操作,将列表根据元素的值进行排序,无返回 方法 sorted 则会创建序列对象副本并做排序,并总返回一个列表对象 方法 reverse 为原地操作,按相反顺序排列列表元素,无返回

  1. a = [1, 3, 2, 5]
  2. a.sort() ### a 为 [1, 2, 3, 5]
  3. a.reverse() ### a 为 [5, 3, 2, 1]
  4. b = 'hello'
  5. sorted(b) ### 返回一个列表对象副本 ['e', 'h', 'l', 'l', 'o'], 字符串序列对象b不变

序列之 Tuple 元组

形如由函数 tuple()转换或声明的,或由圆括号()包裹的有序对象 元组具有不可变性,但如果元组内的元素本身是可变的,可以完成该元素的修改

定义元组

  1. a = () ### 定义空元组
  2. b = ('xyz',) ### 定义只有一个元素且值为'xyz'的元组
  3. tuple('xyz') ### 将字符串 xyz 转换为元组, 变成了 ('x', 'y', 'z')

元组不可变性

image.png


序列之 String 字符串

形如 a=’1’, b=’Hello World’, str(1), str([1, 2, 3]) 等,由单/双引号成对地包裹的内容即字符串 String字符串是不可变序列

格式化方法

最佳性能版

py3.8+ 支持 转换说明符 F\ f To use formatted string literals, begin a string with f or F before the opening quotation mark or triple quotation mark. Inside this string, you can write a Python expression between { and } characters that can refer to variables or literal values.

  1. >>> year = 2016
  2. >>> event = 'Referendum'
  3. >>> f'Results of the {year} {event}'
  4. 'Results of the 2016 Referendum'

简化版

转换说明符 %

  • %s 格式化为字符串
  • %d 格式化为十进制数
  • %.2f 格式化为包含两位小数的浮点数 ```python

    print(“hell, %s ! Today is very %s” % (‘Boy’, ‘Nice’)) hell, Boy ! Today is very Nice

print(“hell, %s ! Today is %dth day” % (‘Boy’, 6)) hell, Boy ! Today is 6th day ```

模板字符串

Unix Shell 风格 这个是耗时最久的

  1. >>> from string import Template
  2. >>> tmpl = Template("Hello, $who! $what enough for ya?")
  3. >>> tmpl.substitute(who="Mars", what="Dusty")
  4. 'Hello, Mars! Dusty enough for ya?'

标准格式化format()

可以通过索引或关键字来设置

  1. # 索引的方式
  2. >>> "{}, {} and {}".format("first", "second", "third")
  3. 'first, second and third'
  4. >>> "{2}, {1} and {0}".format("first", "second", "third")
  5. 'third, second and first'
  6. # 关键字的方式
  7. >>> from math import pi
  8. >>> "{name} is approximately {value:.2f}.".format(value=pi, name="π")
  9. 'π is approximately 3.14'

部分API

拼接 +join()

必须都是字符串类型

  1. >>> a=['1','2','3']
  2. >>> '+'.join(a)
  3. '1+2+3'
  4. >>> b='123'
  5. >>> '-'.join(b)
  6. '1-2-3'
  7. >>> c='1,2,3'
  8. >>> '-'.join(c)
  9. '1-,-2-,-3'

拆解 split()

匹配到指定的字符串则以列表返回结果

  1. >>> a='1,2,3'
  2. >>> a.split(',')
  3. ['1', '2', '3']

全局替换 replace()

将指定子串全部都替换为另一个字符串,并返回替换后的结果

  1. >>> a='123=abc'
  2. >>> a.replace('=','')
  3. '123abc'

查找索引位 find()

方法find在字符串中查找子串。如果找到,就返回子串的第一个字符的索引,否则返回-1

测试示例

  1. def string_api():
  2. text = "this is one paragrapha,包括了一些符合对如()[],也有一些特殊符号!@#$"
  3. print(text.title())
  4. print('/'.join(text))
  5. print(text.split(',', 1))
  6. print(text.replace("is", "展示了"))
  7. print(text.find('!'))
  8. print(text[:6])
  9. """ 输出分别如下
  10. This Is One Paragrapha,包括了一些符合对如()[],也有一些特殊符号!@#$
  11. t/h/i/s/ /i/s/ /o/n/e/ /p/a/r/a/g/r/a/p/h/a/,/包/括/了/一/些/符/合/对/如/(/)/[/]/,/也/有/一/些/特/殊/符/号/!/@/#/$
  12. ['this is one paragrapha', '包括了一些符合对如()[],也有一些特殊符号!@#$']
  13. th展示了 展示了 one paragrapha,包括了一些符合对如()[],也有一些特殊符号!@#$
  14. 45
  15. this i
  16. """

映射之 dict 字典

一种可以通过名称来访问各个值的数据结构 值不按顺序排列,而是存储在键下。键可能是数、字符串或元组,即任意不可变的类型作为键 字典的键具备唯一性 形如 {'k1': 'v1', 'k2': 'v2'}即字典,空字典即 {} dict()即意将某对象转换成字典类型

基本操作

形如

  • len(d)返回字典d包含的项(键-值对)数
  • d[k]返回与键k相关联的值。如果 k 不存在,则报错
  • d[k] = v将值v关联到键k。如果k不存在,则创建一个 k 并关联值 v
  • del d[k]删除键为k的项
  • k in d检查字典d是否包含键为k的项

    关于字典的无序性

    字典的无序是指数据存进字典的顺序跟取出字典的顺序不一致 from collections import OrderedDict 则是使用有序字典 值得注意的是,根据 Python 版本的不同,比如 python_3.7及以上 dict 是有序的(这个在官方某处隐晦提及,可以自测)

image.png

常用方法与 API

  1. class DictAction:
  2. def __init__(self):
  3. pass
  4. @staticmethod
  5. def dict_formatter():
  6. phone_book = {'Beth': '9102', 'Alice': '2341', 'Cecil': '3258'}
  7. # 字符串格式化用于字典
  8. res = "Cecil's phone number is {Cecil}.".format_map(phone_book)
  9. print(res) ### 输出为 "Cecil's phone number is 3258."
  10. @staticmethod
  11. def dict_items_exchange():
  12. a = {'1': 'a', '2': 'b', '3': 'c'}
  13. b = {}
  14. for k, v in a.items():
  15. b[v] = k ### 这个是序列解包的用法,可以快速交换值
  16. print(b) ### 输出为 {'a': '1', 'b': '2', 'c': '3'}
  17. # 1 dict.clear()
  18. # 删除字典内所有元素
  19. # 2 dict.copy()
  20. # 返回一个字典的浅复制。 深复制需要 from copy import deepcopy
  21. # 3 dict.fromkeys(seq[, val])
  22. # 创建一个新字典,以序列 seq 中元素做字典的键,val 为字典所有键对应的初始值
  23. # 例如 dict.fromkeys(['name', 'age'], '(unknown)')
  24. # >>> {'age': '(unknown)', 'name': ('unknown')}
  25. # 4 dict.get(key, default=None)
  26. # 返回指定键的值,如果值不在字典中返回default值
  27. # 5 dict.has_key(key)
  28. # 如果键在字典dict里返回true,否则返回false
  29. # 6 dict.items()
  30. # 以列表返回可遍历的(键, 值) 元组数组
  31. # 7 dict.keys()
  32. # 以列表返回一个字典所有的键
  33. # 8 dict.setdefault(key, default=None)
  34. # 和get()类似, 但如果键不存在于字典中,将会添加键并将值设为default
  35. # 9 dict.update(dict2)
  36. # 把字典dict2的键/值对更新到dict里
  37. # 10 dict.values()
  38. # 以列表返回字典中的所有值
  39. # 11 pop(key[,default])
  40. # 删除字典给定键 key 所对应的值,返回值为被删除的值。key值必须给出。否则,返回default值
  41. # 12 popitem()
  42. # 随机返回并删除字典中的一对键和值
  43. if __name__ == '__main__':
  44. d = DictAction()
  45. d.dict_items_exchange()